1874번 스택 수열

1874번 스택 수열 백준 알고리즘 문제

일단, 문제를 풀 때 꼭 scanf 와 printf를 써야함을 다시금 깨닫게 만들어준 문제다. 귀찮더라도 적어도 알고리즘 문제를 풀 때는 scanf & printf를 사용해야겠다. 문제 자체의 원리는 간단했다. 스택을 사용하면 간단하게 해결되는 문제였다.

// 스택 수열
#include <iostream>
#include <cstdio>
#include <stack>
#include <vector>
using namespace std;

int n;
int arr[100001];
vector<char> sarr;
stack<int> st;
int main()
{
    cin >> n;
    for (int i = 1; i <= n; i++)
        scanf("%d", &arr[i]);

    int pushVal = 1; //넣어야 되는 수
    for (int i = 1; i <= n; i++)
    {
        // 이번에 만들어야 하는 수열의 수 = t
        int t = arr[i];
        // 넣어야 되는 수보다 만들어야 하는 수가 크면 더 push 를 해야 한다.
        // 만약에 넣어야 되는 수가 더 크면 이미 스택 top에 위치하고 있어야한다.
        // 그렇지 않으면 error
        if (pushVal <= t)
        {
            for (int j = pushVal; j <= t; j++)
            {
                st.push(j);
                sarr.push_back('+');
            }
            pushVal = t + 1;
            st.pop();
            sarr.push_back('-');
        }
        else
        {
            if (st.empty())
            {
                cout << "NO" << endl;
                return 0;
            }
            else
            {
                if (t != st.top())
                {
                    cout << "NO" << endl;
                    return 0;
                }
                st.pop();
                sarr.push_back('-');
            }
        }
    }
    for (int i = 0; i < sarr.size(); i++)
    {
        printf("%c\n", sarr[i]);
    }
    return 0;
}