PS

BOJ 1918 - 후위 표기식

728x90

www.acmicpc.net/problem/1918

 

1918번: 후위 표기식

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

www.acmicpc.net

 

전형적인 스택 문제다

입력값에 따른 케이스를 잘 분류해서 연산하면 답이 나온다

 

 

- c++

#include <iostream>
#include <stack>
#include <string>
 
using namespace std;
 
stack<char> st;
string input, answer;
 
int main() {
    cin.tie(0);
    ios_base::sync_with_stdio(0);
 
    cin >> input;
    for (int i = 0; i < input.length(); i++) {
        if ('A' <= input[i] && input[i] <= 'Z') {  // 피연산자
            answer.push_back(input[i]);
        } else {  // 사칙연산자
            switch (input[i]) {
                case '*':
                case '/':
                    while (!st.empty() && (st.top() == '*' || st.top() == '/')) {
                        answer.push_back(st.top());
                        st.pop();
                    }
                    st.push(input[i]);
                    break;
                case '+':
                case '-':
                    while (!st.empty() && st.top() != '(') {
                        answer.push_back(st.top());
                        st.pop();
                    }
                    st.push(input[i]);
                    break;
                case '(':
                    st.push(input[i]);
                    break;
                case ')':
                    while (!st.empty() && st.top() != '(') {
                        answer.push_back(st.top());
                        st.pop();
                    }
                    st.pop();
                    break;
            }
        }
    }
 
    while (!st.empty()) {
        answer.push_back(st.top());
        st.pop();
    }
 
    cout << answer;
 
    return 0;
}
cs

 

 

728x90

'PS' 카테고리의 다른 글

BOJ 2075 - N번째 큰 수  (0) 2021.02.05
BOJ 9328 - 열쇠  (0) 2021.02.05
BOJ 1043 - 거짓말  (0) 2021.02.04
BOJ 15961 - 회전 초밥  (0) 2021.02.01
BOJ 16681 - 등산  (0) 2021.01.31