No Rules Rules

후위 표기식 (feat. 백준, 1918번) 본문

생활/코테

후위 표기식 (feat. 백준, 1918번)

개발하는 완두콩 2023. 2. 20. 12:20
728x90
반응형

후위 표기식
https://www.acmicpc.net/problem/1918

 

1918번: 후위 표기식

첫째 줄에 중위 표기식이 주어진다. 단 이 수식의 피연산자는 알파벳 대문자로 이루어지며 수식에서 한 번씩만 등장한다. 그리고 -A+B와 같이 -가 가장 앞에 오거나 AB와 같이 *가 생략되는 등의

www.acmicpc.net

 

// woohyeon.kim
// kim519620.tistory.com
#include <iostream>
#include <string>
#include <stack>
#include <map>
using namespace std;
int main(){
    ios::sync_with_stdio(false), cin.tie(NULL);
    map<char, int> chk;
    chk['+'] = chk['-'] = 0;
    chk['*'] = chk['/'] = 1;
    chk['('] = chk[')'] = -1;
    string str;
    stack<char> st;
    cin >> str;
    for(auto& ch : str){
        if('A' <= ch && ch <= 'Z')
            cout << ch;
        else if(ch == '(')
            st.push(ch);
        else if(ch == ')'){
            while(st.top() != '(')
                cout << st.top(), st.pop();
            st.pop();
        }
        else{
            while(!st.empty() && chk[st.top()] >= chk[ch])
                cout << st.top(), st.pop();
            st.push(ch);
        }
    }
    while(!st.empty())
        cout << st.top(), st.pop();
	return 0;
}
// *&)*@*

 

반응형
  1. 알파벳은 그대로 출력해줍니다.
  2. '(' 는 스택에 삽입하고, ')' 는 출력하진 않고 스택에서 '(' 가 나올때까지 스택을 출력&비워줍니다.
  3. 각 연산은 '*', '/' 가 우선순위가 높으므로 해당 연산식이 나올때까지 스택을 비워줍니다.
728x90
반응형
Comments