백준 문제/자료구조

[백준] 1874번 스택 수열

dubu0721 2024. 12. 27. 15:26

문제: 1874번: 스택 수열

 

#include <iostream>
#include <vector>
#include <queue>
#include <stack>

using namespace std;

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

    int n;
    cin >> n;
    int cnt = 0;

    vector<int> save;
    for (int i = 1; i <= n; i++) {
        int tmp;
        cin >> tmp;
        save.push_back(tmp);
    }

    stack<int> s;
    string answer;
    int cur = 1;
    bool flag = false;

    while (true) {
        if (cnt == n) break;

        if (s.empty() || s.top() != save[cnt]) {
            if (cur > n) {
                flag = true;
                break;
            }

            s.push(cur);
            answer += "+";
            cur++;
        }
        else if (s.top() == save[cnt]) {
            s.pop();
            answer += "-";
            cnt++;
        }
    }

    if (!flag) {
        for (int i = 0; i < answer.size(); i++)
            cout << answer[i] << "\n";
    }
    else
        cout << "NO\n";


    return 0;
}

 

기본적인 로직 토대는 완성했는데 while 문 종료 조건을 어떻게 줘야하는지 잘 모르겠어서 조금 헤맸다 -_-;;  그래도 문제 자체는 stack 개념 잘 알고 있으면 특성 이용해서 그대로 구현하면 되니까 엄청 어렵진 않았다..

 

아 종료조건 설정에서 헤맨건 살짝 충격인데... 앞으로도 열심히 해야할 것 같다;;