역 폴란드어 표기법으로 산술식을 나타내는 문자열 토큰 배열이 주어집니다.
표현식을 평가합니다. 표현식의 값을 나타내는 정수를 반환합니다.
참고하세요:
+
, -
, *
및 /
입니다.import java.util.*;
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());
case "-" -> {
int a = stack.pop();
int b = stack.pop();
stack.push(b - a);
}
case "*" -> stack.push(stack.pop() * stack.pop());
case "/" -> {
int a = stack.pop();
int b = stack.pop();
stack.push(b / a);
}
default -> stack.push(Integer.parseInt(token));
}
}
return stack.pop();
}
}
class Solution {
public int evalRPN(String[] tokens) {
int[] stack = new int[tokens.length];
int top = -1;
for (String token: tokens) {
switch (token) {
case "+" -> stack[top - 1] += stack[top--];
case "-" -> stack[top - 1] -= stack[top--];
case "*" -> stack[top - 1] *= stack[top--];
case "/" -> stack[top - 1] /= stack[top--];
default -> stack[++top] = Integer.parseInt(token);
}
}
return stack[top];
}
}
Stack이나 배열 모두 숫자면 저장하고, 연산자가 나온 경우에는 두개의 수를 뽑아서, 계산 후에 다시 넣는 동작을 반복하면 결국 계산 된 마지막 결과만 배열과 stack 남게 됩니다.
계산이 끝난 결과값을 return 하기만 하면 끝