Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
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
Archives
Today
Total
관리 메뉴

hwooo

LeetCode (C/C++) 150. Evaluate Reverse Polish Notation 본문

Study/Algorithm

LeetCode (C/C++) 150. Evaluate Reverse Polish Notation

hwooo 2024. 5. 8. 19:06

https://leetcode.com/problems/evaluate-reverse-polish-notation/description/


풀이

연산자를 가장 마지막에 표기하는 후위 표기법을 푸는 문제와 동일하다.

숫자가 나오면 해당 값을 스택에 넣고, 연산자가 나오면 저장된 값 중 가장 최근 값 2개를 꺼내 계산 후 다시 삽입하는 방식으로 풀었다.


코드

class Solution {
public:
    int evalRPN(vector<string>& tokens) {
        stack <int> nums;
        
        for (int i = 0; i < tokens.size(); i++) {
            string token = tokens[i]; 
       
            // 연산자라면 제일 최근에 저장된 값 2개를 꺼내 계산 후 다시 넣음
            if (token == "+" || token == "-" || token == "*" || token == "/") {
                int num1, num2;
                num2 = nums.top();
                nums.pop();
                
                num1 = nums.top();
                nums.pop();

                if (tokens[i] == "+")
                    nums.push(num1 + num2);
                else if (tokens[i] == "-")
                    nums.push(num1 - num2);
                else if (tokens[i] == "*")
                    nums.push(num1 * num2);
                else if (tokens[i] == "/")
                    nums.push(num1 / num2);
            }
            
            // 숫자라면 스택에 값 넣기
            else
                nums.push(stoi(tokens[i]));
        }       
        return nums.top();
    }
};