본문 바로가기
Algorithm/BackJoon

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

by 꼬부기가우는소리 2023. 9. 3.
728x90

 

- 문제 사이트: https://www.acmicpc.net/problem/12789

 

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

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

www.acmicpc.net

 

줄 서 있는 학생들은 queue 형태로 이동하고, 임시 공간에 서는 학생은 stack 형태로 이동한다.

이에 맞게 아래의 로직을 구현해주면 된다.

 

1) 비교할 수 있도록 현재 순서를 저장 (order)

2) 임시 공간 (stack) 가장 위의 학생이 현재 순서와 일치하는지 확인

3-1) 줄 서 있는 (queue) 가장 앞의 학생이 현재 순서와 일치한다면, 다음 학생 확인: order++

3-2) 줄 서 있는 (queue) 가장 앞의 학생이 현재 순서와 일치하지 않는다면, 임시 공간에 학생 이동

4) 비교 가능한 학생이 없는 경우, 종료

 

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

int main()
{
    int N, n;
    queue<int> student;
    stack<int> waiting;
    
    cin >> N;
    for (int i = 0; i < N; i++)
    {
        cin >> n;
        student.push(n);
    }
    
    int order = 1;
    while (true)
    {
        if (!waiting.empty() && waiting.top() == order)
        {
            waiting.pop();
            order++;
        }
        else if (!student.empty())
        {
            if (student.front() == order)
            {
                student.pop();
                order++;
            }
            else
            {
                n = student.front();
                student.pop();
                waiting.push(n);
            }
        }
        else
        {
            break;
        }
    }
    
    if (student.empty() && waiting.empty())
        cout << "Nice";
    else
        cout << "Sad";
    return 0;
}

- 메모리: 2024 KB

- 시간: 0 ms

- 코드 길이: 933 B

'Algorithm > BackJoon' 카테고리의 다른 글

1373번: 2진수 8진수  (0) 2023.09.05
10820번: 문자열 분석  (0) 2023.09.04
11659번: 구간 합 구하기 4  (0) 2023.09.01
2851번: 슈퍼 마리오  (0) 2023.08.31
5337번: 웰컴  (0) 2023.07.11

댓글