LeetCode 150 Evaluate Reverse Polish Notation 풀러가기
String 배열 tokens 가 주어진다.
tokens에 있는 배열은 역폴란드 기업으로 표현된 산술표현식이다.
역폴란드 기업으로 표현된 산술표현식이란
["2","1","+","3","*"]
일 때 , ((2, 1, +) 3, *)
로 묶어지며 ((2 + 1) * 3)
을 수행하면 된다.
이를 계산한 결과값을 리턴한다.
산수식 표현은 보통 스택을 활용해서 많이 풀어봐서 검증만 하고 바로 구현했다.
역폴란드 기업이니, 숫자 2개 연산자 1개 순서대로 들어오다는 걸 기억하면 된다.
숫자 일 경우 stack에 넣고, 연산자일 경우 에서 숫자 2개를 뽑고, 계산 후 다시 stack에 넣으면 된다.
위 과정을 표현식 끝까지 계속 하면 stack에는 정답 숫자만 남아있다. 이를 리턴하면 된다.
코드
import java.util.*;
class Solution {
public int evalRPN(String[] tokens) {
Stack<Integer> stack = new Stack<>();
for(int i=0; i<tokens.length; i++){
if(tokens[i].equals("+")||tokens[i].equals("-")
||tokens[i].equals("/")||tokens[i].equals("*")){
int a = stack.pop();
int b = stack.pop();
switch(tokens[i]){
case "+" :
stack.push(b+a);
break;
case "-" :
stack.push(b-a);
break;
case "*" :
stack.push(b*a);
break;
case "/" :
stack.push(b/a);
break;
}
}
else stack.push(Integer.valueOf(tokens[i]));
}
return stack.pop();
}
}
결과 : 성공
Runtime
Memory
시간도 메모리도 만족스런 알고리즘이였다.