https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14tDX6AFgCFAYD

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

#문제 간단 정리

기존의 후위 표기법 변환과 같다

괄호 사용함에 주의하자

#문제 해결 방법

 

#전체 코드

#include <iostream>
#include <stack>
#include <cctype> 

using namespace std;

int precedence(char op) {
    if (op == '*' || op == '/') return 2;
    if (op == '+' || op == '-') return 1;
    return 0;
}

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

    for (int tc = 1; tc <= 10; tc++) {
        int t; cin >> t;

        string s;
        cin >> s;

        stack<char> st;
        string output;

        for (int i = 0; i < s.length(); i++) {
            char now = s[i];

            if (isdigit(now)) {
                output += now;
            }
            else if (now == '(') {
                st.push(now);
            }
            else if (now == ')') {
                while (!st.empty() && st.top() != '(') {
                    output += st.top();
                    st.pop();
                }
                st.pop();
            }
            else {
                while (!st.empty() && precedence(st.top()) >= precedence(now)) {
                    output += st.top();
                    st.pop();
                }
                st.push(now);
            }
        }

        while (!st.empty()) {
            output += st.top();
            st.pop();
        }

        //cout << output << '\n';


        //계산
        stack<int> st2;
        for (int i = 0; i < output.length(); i++) {

            char now = output[i];
            if (isdigit(now)) {
                st2.push(now - '0');
            }
            else {
                char temp = output[i];
                int second = st2.top();
                st2.pop();
                int first = st2.top();
                st2.pop();
                if (temp == '+') {
                    st2.push(first + second);
                }
                else if (temp == '-') {
                    st2.push(first - second);
                }
                else if (temp == '*') {
                    st2.push(first * second);
                }
                else if (temp == '/') {
                    st2.push(first / second);
                }
            }

        }

        cout << '#' << tc << ' ' << st2.top() << '\n';
    }

    return 0;
}

+ Recent posts