Evaluate Reverse Polish Notation - LeetCode
1 <= tokens.length <= 10^4
tokens[i]
is either an operator: "+"
, "-"
, "*"
, or "/"
, or an integer in the range [-200, 200]
.후위 표기법의 연산은 스택을 활용하면 쉽게 할 수 있다.
숫자는 스택에 삽입하고, 연산자가 나오면 스택의 최상단 2개의 값을 꺼내 연산하면 된다 → Sol1
Stack
import java.util.*
class Solution {
fun evalRPN(tokens: Array<String>): Int {
val stack = Stack<Int>()
for (token in tokens) {
if(token.all { it.isDigit() } || (token[0] == '-' && token.length > 1 && token.substring(1, token.length).all { it.isDigit() })) {
stack.add(token.toInt())
} else { // 연산자가 들어온 경우
val second = stack.pop()
val first = stack.pop()
when (token) {
"+" -> stack.add(first + second)
"-" -> stack.add(first - second)
"*" -> stack.add(first * second)
"/" -> stack.add(first / second)
}
}
}
return stack.pop()
}
}
시간 복잡도: 문자열 순회 = n