백준/실버

[백준 12789번] 도키도키 간식드리미

게임개발기원 2023. 5. 2. 18:18

문제링크 : https://www.acmicpc.net/problem/12789

 

12789번: 도키도키 간식드리미

인하대학교 학생회에서는 중간, 기말고사 때마다 시험 공부에 지친 학우들을 위해 간식을 나눠주는 간식 드리미 행사를 실시한다. 승환이는 시험 기간이 될 때마다 간식을 받을 생각에 두근두

www.acmicpc.net

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define MAX 987654321
#define pii pair <int, int>

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

    
    int N;
    cin >> N;

    queue<int> arr;
    for(int i=0; i<N; i++)
    {
        int n;
        cin >> n;
        arr.push(n);
    }

    stack <int> stack;

    int index = 1;

    while(!arr.empty())
    {
        if(arr.front() == index)  //순서대로 받기
        {
            index++;
            arr.pop();
        }
        else  //못받은 인원
        {
            if(stack.empty() || stack.top() != index) 
            {
                stack.push(arr.front());
                arr.pop();
            }
            else if(stack.top() == index) //다음 순서
            {
                stack.pop();
                index++;
            }
        }
    }

    while(!stack.empty())  //못받은 남인 인원
    {
        if(stack.top() != index)  //순서가 틀림
        {
            cout << "Sad";
            return 0;
        }
        else  //순서가 맞음
        {
            stack.pop();
            index++;
        }
    }

    cout << "Nice";

    return 0;
}

맨 처음 인원들을 순서가 맞다면 간식을 받고, 나머지 인원들은 대기 장소로 이동한다.

대기 장소의 인원들 또 확인하여 순서가 맞다면 간식을 받고, 아니라면 "Sad"를 출력하고 종료한다.