해당 문제는 보자마자 스택
형 문제임을 직감했다.
해당 자료구조를 떠올렸다면 구현에 큰 어려움이 없는 문제임
tokens
를 순회하며 각 기호에 맞는 처리를 하면 된다.
단, 주의해야 할 점은 두 번째 pop()
된 선입된 요소가 나누기 작업 시 분자에 위치해야함
function evalRPN(tokens: string[]): number {
// 스택 방식 풀이
const stack: number[] = []
for(let i = 0; i < tokens.length; i++) {
const token = tokens[i]
// 기호에 맞는 처리
switch(token) {
case '+': {
const t1 = stack.pop()!
const t2 = stack.pop()!
stack.push(t2 + t1)
break
}
case '-': {
const t1 = stack.pop()!
const t2 = stack.pop()!
stack.push(t2 - t1)
break
}
case '*': {
const t1 = stack.pop()!
const t2 = stack.pop()!
stack.push(t2 * t1)
break
}
case '/': {
const t1 = stack.pop()!
const t2 = stack.pop()!
stack.push(Math.trunc(t2 / t1))
break
}
default: {
stack.push(Number(token))
}
}
}
// 최종 결과는 stack에 저장
return stack.pop()!
};