IMyoungho 2020. 3. 23. 21:59

이번문제는 후위계산식으로 만들어서 계산하는 문제이다.

그렇게 어려운 난이도는 아니였다. 후위계산법을 제대로 이해하고 문제를 풀면된다.

연산자가 '+' 만 주어졌기 때문에 예외처리할게 많지 않았다.

아마 문제에 숫자가 붙은걸로봐서 앞으로 연산자들이 추가될 것 같은 예감이 든다ㅋㅋㅋ

허접한 코드로 일단 푸는 것에 의의를 두었다. 

 

< Code 설명 >

#include <iostream>
#include <stack>
#include <queue>
#include <string.h>


using namespace std;

int main()
{
    int n;
    for(int k=1; k<=10; k++){
        cin >> n;
        string str;
        cin >> str;
        stack <char>s1;
        queue<char>s2;
        char v;
        for(int i=0; i<n; i++){
            if(str[i]=='+'){
                if(!s1.empty()){
                    if(!memcmp(&s1.top(),&str[i],1)){
                        s2.push(v);
                        s1.pop();
                    }
                }
                s1.push(str[i]);
                v = s1.top();
            }
            else
                s2.push(str[i]);
            if(i==n-1){
                s2.push(s1.top());
                s1.pop();
            }
        }
        int ans=s2.front()-48, a=0;
        s2.pop();
        while(!s2.empty()){
            if(s2.front()=='+'){
                ans+=a;
                s2.pop();
            }
            else {
                a=s2.front()-48;
                s2.pop();
            }
        }
        cout << "#"<< k << " " << ans << endl;
    }
    return 0;
}

-> 풀긴풀었는데 뭔가 더러운 느낌.. ㅋㅋㅋ

앞으로 예상했던 예외처리가 늘어날 때 깔끔하게 짜야겠다ㅎㅎ

반응형