[리트코드] 150. Evaluate Reverse Polish Notation

업데이트:

Evaluate Reverse Polish Notation

문제

이 문제는 전형적인 스택을 사용해서 계산기를 구현하는 것입니다.

하지만 좀 다른점은 입력이 String으로 된다는 것입니다.

따라서 연산자와 숫자를 어떻게 구분할지 고민하던 전 isdigit 함수를 이용한 isNumber 함수를 구현하였고

숫자면 스택에 추가하고 연산자면 계산을 진행하는 방식으로 풀었습니다.

풀이는 다음과 같습니다.

Source Code:

class Solution {
public:
    bool isNumber(string num){
        for(auto n : num){
            if(n == '-' && num.length() == 1) return false;
            if(n == '-') continue;
            if(!isdigit(n))
                return false;
        }
        return true;
    }
    
    int evalRPN(vector<string>& tokens) {
        stack<int> st;
        for(auto token : tokens){
            if(isNumber(token)){
                st.push(stoi(token));
            }else{
                int a = st.top();
                st.pop();
                int b = st.top();
                st.pop();
                if(token == "+") st.push(b+a);
                if(token == "-") st.push(b-a);
                if(token == "*") st.push(b*a);
                if(token == "/") st.push(b/a);
            }
        }
        return st.top();
    }
};

궁금하신 점은 댓글 남겨 주세요!!

Summary

  • 많은 피드백 부탁드리겠습니다.

댓글남기기