Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 맛집
- 눈알빠지겠네
- 하스스톤
- 발더스게이트
- 미앤아이
- 서울제빵소
- 3d퍼즐
- 취미
- 게임
- 잠실새내
- 나쫌
- 누룽지소금빵
- 송리단
- 노노그램
- 바질토마토뭐시기
- 코테
- 밥먹고
- 버즈2프로
- 발더스모드
- 발더스3
- 뜨아거
- 토이프로젝트
- 천등
- 메탈퍼즐
- 코딩테스트
- DIY
- 메일우유
- 알고리즘테스트
- LeetCode
- javascript
Archives
- Today
- Total
.Zzumbong
[leetCode/JS] 150. Evaluate Reverse Polish Notation 본문
난이도 [ 🤔 ] 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];
};
감상평
- 역폴란드표기법은 괄호가 필요 없다는 점에서 굉장히 유용한 수식 표현법이 아닐까 싶다.
- 너무 재미있는 표기법을 배워서 만족스러운 문제였다.
'coding test > leetCode' 카테고리의 다른 글
[leetCode/JS] 841. Keys and Rooms (0) | 2022.12.20 |
---|---|
[leetCode/JS] 739. Daily Temperatures (0) | 2022.12.18 |
[leetCode/JS] 232. Implement Queue using Stacks (0) | 2022.12.16 |
[leetCode/JS] 1143. Longest Common Subsequence (0) | 2022.12.15 |
[leetCode/JS] 152. Maximum Product Subarray (0) | 2022.12.14 |
Comments