📑 문제
Reverse Polish Notation (RPN, 후위 표기법)으로 표현된 산술 식이 문자열 배열로 주어집니다.
문제의 목표는 이 산술 식을 계산하고 그 결과값을 정수 형태로 반환하는 것입니다.
문제 접근 방식
토큰이 연산자라면, switch - case 문을 통해, 분기처리를 했습니다.
만약 + 라면, 스택에서 두개의 원소를 pop하여 합한 후, 합계를 다시 push 합니다.
그래서 pop을 두번 하였습니다.
/ 연산자의 경우 부호때문에 추가적인 로직을 작성했습니다.
만약 현재 토큰이 숫자라면 stack에 push 합니다.
이렇게 연산자일 경우에는 스택에서 pop, push 연산을 통해 계산을 하고, 숫자일 경우에는 바로 stack에 push 하는 방식으로 구현했습니다.
📑 CODE
class Solution {
public int evalRPN(String[] tokens) {
Stack<Integer> stack = new Stack<>();
for(String token : tokens){
switch(token) {
case "+":
stack.push(stack.pop() + stack.pop());
break;
case "-":
int a = stack.pop();
int b = stack.pop();
stack.push(b - a);
break;
case "*":
stack.push(stack.pop() * stack.pop());
break;
case "/":
a = stack.pop();
b = stack.pop();
if (b < 0 || a < 0)
b /= a;
else
b = Math.abs(b) / Math.abs(a);
stack.push(b);
break;
default:
stack.push(Integer.parseInt(token));
break;
}
}
return stack.isEmpty() ? 0 : stack.peek() ;
}
}