
주어지는 문자열 배열에 사칙연산과 숫자가 있다.
사칙연산이 등장하는 시점으로부터 앞의 2개의 숫자를 우선순위로 계산하여 정답을 리턴하는 문제
문제 분석에서 이미 스택을 이용한 풀이를 유추할 수 있다.
사칙연산("+", "-", "/", "*") 이 등장하는 시점을 체크한다.
만약 등장했다면, 스택에서 2개의 숫자를 꺼내서 계산해주고
다시 스택에 넣는다.
위의 로직으로 문제를 해결할 수 있다.
스택이 가지고 있는 특성인 '후입선출'을 이용하면 사칙연산의 우선순위를 쉽게 적용할 수 있다.
public int evalRPN(String[] tokens) {
Stack<String> stack = new Stack<>();
int firstNumber = 0;
int secondNumber = 0;
for (String token : tokens) {
switch (token) {
case "+":
secondNumber = Integer.parseInt(stack.pop());
firstNumber = Integer.parseInt(stack.pop());
stack.push(String.valueOf(firstNumber + secondNumber));
break;
case "-":
secondNumber = Integer.parseInt(stack.pop());
firstNumber = Integer.parseInt(stack.pop());
stack.push(String.valueOf(firstNumber - secondNumber));
break;
case "/":
secondNumber = Integer.parseInt(stack.pop());
firstNumber = Integer.parseInt(stack.pop());
stack.push(String.valueOf(firstNumber / secondNumber));
break;
case "*":
secondNumber = Integer.parseInt(stack.pop());
firstNumber = Integer.parseInt(stack.pop());
stack.push(String.valueOf(firstNumber * secondNumber));
break;
default:
stack.push(token);
}
}
return Integer.parseInt(stack.pop());
}
