.Zzumbong

[leetCode/JS] 150. Evaluate Reverse Polish Notation 본문

coding test/leetCode

[leetCode/JS] 150. Evaluate Reverse Polish Notation

쭘봉 2022. 12. 17. 21:44

난이도 [ 🤔 ] Medium 

 

문제 설명 

Evaluate the value of an arithmetic expression in Reverse Polish Notation.

Valid operators are +, -, *, and /. Each operand may be an integer or another expression.

Note that division between two integers should truncate toward zero.

It is guaranteed that the given RPN expression is always valid. That means the expression would always evaluate to a result, and there will not be any division by zero operation.

 

역폴란드표기법? 으로 만들어진 배열을 계산하는 것이다. 역폴란드표기법은 생각보다 쉽다. 
연산자가 나오는 i 기준으로 [i-2] [i] [i-1] 으로 연산 하는 것이다.

 

 

입출력 예

Example 1:

Input: tokens = ["2","1","+","3","*"]
Output: 9
Explanation: ((2 + 1) * 3) = 9

 

Example 2:

Input: tokens = ["4","13","5","/","+"]
Output: 6
Explanation: (4 + (13 / 5)) = 6

 

Example 3:

Input: tokens = ["10","6","9","3","+","-11","*","/","*","17","+","5","+"]
Output: 22
Explanation: ((10 * (6 / ((9 + 3) * -11))) + 17) + 5
= ((10 * (6 / (12 * -11))) + 17) + 5
= ((10 * (6 / -132)) + 17) + 5
= ((10 * 0) + 17) + 5
= (0 + 17) + 5
= 17 + 5
= 22

 

 

 

Constraints

  • 1 <= tokens.length <= 104
  • tokens[i] is either an operator: "+", "-", "*", or "/", or an integer in the range [-200, 200].

 

 

 


내 솔루션

  • 연산자 object에 각 연산자 별 함수를 저장해두고 연산자를 만나게되면 tokens[i-2], tokens[i-1] 을 연산한다.
  • 연산된 결과값을 다시 tokens에 집어 넣지만 splice()를 통해 [i-2], [i-1], [i] 를 지우고 넣는다.
  • i 는 -2 만큼 뒤로 돌려주면 된다.
  • for loop가 끝나면 마지막에 숫자 1개만 남아있게 되니 tokens[0] 을 반환하면 끝난다. 
var evalRPN = function(tokens) {
  const operations = {
    '+': (a, b) => a + b,
    '-': (a, b) => a - b,
    '*': (a, b) => a * b,
    '/': (a, b) => a / b | 0, // or Math.trunc()
  }
  for(let i = 0; i < tokens.length; i++) {
    if(tokens[i] in operations) { // 배열 안에 있는지 없는지 알아내는 쉬운 방법
      tokens.splice(i-2, 3, operations[tokens[i]](parseInt(tokens[i-2]), parseInt(tokens[i-1])))
      i -= 2;
    }
  }
  return tokens[0];
};

 

감상평

  • 역폴란드표기법은 괄호가 필요 없다는 점에서 굉장히 유용한 수식 표현법이 아닐까 싶다.
  • 너무 재미있는 표기법을 배워서 만족스러운 문제였다.
Comments