본문 바로가기
코딩/cpp

[백준] 1541번

by 적막한숲 2025. 9. 28.

stack 개념을 차용은 하는데 마지막 합치는 부분에서 - 부분만 처리를 따로 로직을 짜야하는 부분에서 걸렸다.

 

#include <iostream>
#include <string>
#include <vector>

int main() {
    std::string calc;
    std::cin >> calc;
    std::vector<int> v;
    std::vector<int> op;
    int _s = 0;
    for (int i = 0; i < calc.size(); i++) {
        switch (calc[i]) {
            case '+':
                if (!op.empty() && !op.back()) {
                    int _temp = _s + v.back();
                    v.pop_back();
                    v.push_back(_temp);
                    op.pop_back();
                } else {
                    v.push_back(_s);
                }
                op.push_back(0);
                _s = 0;
                break;
            case '-':
                if (!op.empty() && !op.back()) {
                    int _temp = _s + v.back(); v.pop_back();

                    v.push_back(_temp);
                    op.pop_back();
                } else {
                    v.push_back(_s);
                }
                op.push_back(1);
                _s = 0;
                break;
            default:
                _s*=10;
                _s += calc[i]-'0';
                break;
        }
    }
    v.push_back(_s);
    int sum  = 0;
    while (!op.empty()) {
        if (!op.back()) {
            int _y = v.back();
            v.pop_back();
            int _x = v.back();
            v.pop_back();
            v.push_back(_x+_y);
        } else {
            sum -= v.back();
            v.pop_back();
        }
        op.pop_back();
    }
    sum += v.back();
    std::cout << sum;

    return 0;
}

'코딩 > cpp' 카테고리의 다른 글

[백준] 2630번  (0) 2025.09.28
[백준]1927번  (0) 2025.09.28
[백준] 1012번  (0) 2025.09.27
[백준] 17626번  (0) 2025.09.27
[백준] 11727번  (0) 2025.09.27