[백준/C++] 1874번_스택 수열

이수진·2021년 12월 21일
0

백준

목록 보기
2/2

문제링크

#include <iostream>
#include <stack>
#include <vector>
using namespace std;

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

    int n, first, x, i, k=0;
    int arr[100001];
    vector<char> v;
    stack<int> s;

    cin>>n;

    for(int j=0; j<n; j++){
        cin>>arr[j];
    }

    // 첫번째 경우 예외처리
    for(i=1; i<=arr[0]; i++){
        s.push(i);
        v.push_back('+');
    }
    s.pop();
    v.push_back('-');

    // 두번째 경우부터
    for(int j=1; j<n; j++){
        if(s.empty()){
            while(i<=arr[j]){
                s.push(i++);
                v.push_back('+');
            }
            s.pop();
            v.push_back('-');
        }
        else if(s.top()>arr[j]){
            cout<<"NO\n";
            exit(0);
        }
        else if(s.top()<arr[j]){
            while(i<=arr[j]){
                s.push(i++);
                v.push_back('+');
            }
            s.pop();
            v.push_back('-');
        }
        else{ // s.top() == arr[j]
            s.pop();
            v.push_back('-');
        }
    }

    // 수열을 만들 수 있는 경우
    for(int i=0; i<v.size(); i++) cout<<v[i]<<"\n";
    return 0;
}

벨로그 이거 코드 색깔 왜이렇지??..
재미있는 문제였다. 딱히 복기할만한 내용도 없는 것 같다.
각각의 경우에 대해서, 경우의 수를 잘 나누고 그에 맞게 잘 해결하면 되는 것 같다.

profile
꾸준히, 열심히, 그리고 잘하자

0개의 댓글