본문 바로가기

PS

[ 백준 / C++ ] 1918 : 후위 표기식

[ 문제 ]

 

1918번: 후위 표기식 (acmicpc.net)

 

[ 접근방법 ]

 

연산자를 스택에 저장하고 입력받은 연산자의 종류에 따라 for문 안의 로직을 진행한다.

 

값을 입력받는 상황에서 스택에는 아직 계산하지 않은 연산자들이 저장되어 있다.

 

만약 연산자를 입력받는다면 스택 안의 연산자들 중에 입력 연산자보다 우선 순위가 높은 것들을

빼주는 방식이다.

 

[ 소스코드 ]

 

#include <iostream>
#include <stack>

using namespace std;

string str, ans;
stack<char> st;

void f(){
    while(!st.empty() && st.top() != '('){
        ans += st.top();
        st.pop();
    }
}

void g(){
    while(!st.empty() && (st.top() == '*' || st.top() == '/')){
        ans += st.top();
        st.pop();
    }
}

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);

    cin >> str;
    for(char ch : str){
        if('A' <= ch && ch <= 'Z'){
            ans += ch;
        }
        else{
            if(ch == ')'){
                f();
                st.pop();
            }
            else if(ch == '*' || ch == '/'){
                g();
                st.push(ch);
            }
            else if(ch == '+' || ch == '-'){
                f();
                st.push(ch);
            }
            else if(ch == '('){
                st.push(ch);
            }
        }
    }
    f();

    cout << ans;

    return 0;
}

'PS' 카테고리의 다른 글

[ 백준 / C++ ] 10868 : 최솟값  (0) 2024.07.29
[ 백준 / C++ ] 1275 : 커피숍2  (0) 2024.07.26
[ 백준 / C++ ] 2263 : 트리의 순회  (0) 2024.07.19
[ 백준 / C++ ] 1517 : 버블 소트  (0) 2024.07.18
[ 백준 / C++ ] 17143 : 낚시왕  (0) 2024.07.17