🖇️ 문제 링크
📝 문제 분석
입력으로 "점수|보너스|[옵션]"
형태의 문자열 3세트가 들어옵니다.
점수, 보너스, 옵션을 정규식 매칭으로 3개의 그룹으로 나누어줍니다.
스타상(*)은 해당 점수와 바로 전에 얻은 점수를 각각 2배로 만들기 때문에, 스택에 값을 저장해놓고 스타상이 나오면 스택의 top부분을 2배로 만들어줍니다.
⌨️ 코드
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
class Solution {
public int solution(String dartResult) {
Pattern pattern = Pattern.compile("([0-9]+)([SDT])([*#]?)");
Matcher matcher = pattern.matcher(dartResult);
// 그룹별로 뽑아내자
Deque<Integer> stk = new ArrayDeque<>();
while(matcher.find()) {
int num = Integer.parseInt(matcher.group(1)); // 점수
switch(matcher.group(2)) {
case "D":
num *= num;
break;
case "T":
num *= (num * num);
break;
}
switch(matcher.group(3)) {
case "*":
if(!stk.isEmpty()) {
int top = stk.pop();
stk.push(top * 2);
}
num *= 2;
break;
case "#":
num *= -1;
break;
}
stk.push(num);
}
int ans = 0;
while(!stk.isEmpty())
ans += stk.pop();
return ans;
}
}
Uploaded by Notion2Tistory v1.1.0