안녕하세요. 오늘은 간식을 줄 거예요.

문제

https://www.acmicpc.net/problem/12789

아이디어

그림의 아래쪽에 나온 부분을 스택으로 만들면 됩니다.
현재 줄에 서있는 사람이 현재 받아야할 사람이라면 체크를 하고 스택에서도 가능한지 확인을 합니다.
아니면 스택에 넣어줍니다.

맨 마지막에 다 받았는지 확인해주면 됩니다.

소스코드

#include <iostream>
#include <stack>
#define ll long long
using namespace std;

int main(void)
{
    ios_base::sync_with_stdio(false); cin.tie(NULL);
    ll x, N, i, cnt = 1;
    stack <ll> stk;

    cin >> N;
    for (i = 1; i <= N; i++)
    {
        cin >> x;
        if (x == cnt)
        {
            cnt++;
            while (stk.size() && stk.top() == cnt)
            {
                cnt++;
                stk.pop();
            }
        }
        else
            stk.push(x);
    }
    
    if (cnt == N + 1) cout << "Nice";
    else cout << "Sad";
}


감사합니다.

0개의 댓글