150. Evaluate Reverse Polish Notation
You are given an array of strings tokens that represents an arithmetic expression in a Reverse Polish Notation
Evaluate the expression. Return an integer that represents the value of the expression.
tokens
= ["2","1","+","3","*"]; Output: 9tokens
= ["4","13","5","/","+"]; Output: 6tokens
을 앞에서부터 순회하면서token
이 숫자일 경우, Stack에 쌓아 놓는다.token
이 연산자일 경우, Stack 안에 있는 두 수를 꺼내서 연산을 하고 해당 결과값을 Stack에 쌓아 놓는다.class Solution {
private static final String[] notations = new String[]{"+", "-", "*", "/"};
public int evalRPN(String[] tokens) {
Stack<Integer> stack = new Stack<>();
for (int i = 0; i < tokens.length; i++) {
String token = tokens[i];
if (!isNotation(token)) {
stack.add(Integer.parseInt(token));
continue;
}
int tempResult = calculate(stack.pop(), stack.pop(), token);
stack.add(tempResult);
}
return stack.pop();
}
private boolean isNotation(String token) {
for (int i = 0; i < notations.length; i++) {
if (notations[i].equals(token)) {
return true;
}
}
return false;
}
private int calculate(int num1, int num2, String notation) {
if ("*".equals(notation)) {
return num2 * num1;
}
if ("/".equals(notation)) {
return num2 / num1;
}
if ("+".equals(notation)) {
return num2 + num1;
}
if ("-".equals(notation)) {
return num2 - num1;
}
throw new IllegalArgumentException();
}
}