BOJ : 1874 스택 수열 (C++)

김정욱·2020년 10월 14일
0

Algorithm - 문제

목록 보기
15/249

문제

Code

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

using namespace std;
stack<int> S,tmp;
vector<char> V;

bool findStack(int x)
{
    for(int i=0;i<tmp.size();i++)
    {
        int t = tmp.top();
        tmp.pop();
        if(t == x){
            return true;
        }
    }
    return false;
}
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);

    int N,input,max,flag=0;
    cin >> N;

    max = 0;
    for(int i=0;i<N;i++)
    {
        cin >> input;
        if(input >= max)
        {
            for(int j=max+1;j<=input;j++)
            {
                S.push(j);
                V.push_back('+');
            }
            max = input;
            S.pop();
            V.push_back('-');
        }else if(input < max)
        {
            tmp = S;
            if(findStack(input))
            {
                for(int j=0;j<S.size();j++)
                {
                    int t = S.top();
                    S.pop();
                    V.push_back('-');
                    if(t == input)
                        break;
                }
            }else{
                flag = 1;
            }
        }
    }
    if(flag)
        cout << "NO";
    else
    {
        for(auto a : V)
            cout << a << '\n';
    }
}
profile
Developer & PhotoGrapher

0개의 댓글