Koala - 11기/기초 알고리즘 스터디

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

יוֹסֵף 2023. 8. 20. 21:44

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

 

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

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

www.acmicpc.net

 


문제


문제해석

데큐를 이용하여 순서를 나타내고 대기열 공간은 stack을 활용하여 순서대로 나갈 수 있는지 확인하는 문제이다.


코드

import collections
N = int(input())
q = collections.deque(map(int, input().split()))
tmp = list()
min_value = 1
while q:
    if q[0] != min_value:
        tmp.append(q[0])
        q.popleft()
    else:
        q.popleft()
        min_value += 1
    while tmp:
        if tmp[-1] == min_value:
            tmp.pop()
            min_value += 1
        else:
            break
if not q and tmp == []:
    print("Nice")         
else:
    print("Sad")

문제풀이

처음에는 줄서 있는 공간과 대기열 공간 모두 deque로 구현했었다. 하지만 대기열 공간을 제일 마지막에 들어왔던 사람이 나가는 FIFO 구조이기 때문에 stack을 활용해도 문제가 없어 stack으로 구현했다.

줄 서 있는 공간은 deque를 이용하여 popleft를 해줘 count를 해주고 대기열 공간에서 마지막에 들어오는 사람이 순서에 맞다면 pop을 해주는 방식으로 구현했다. 만약 순서대로 나갔다면 deque와 stack 모두 비어있는 상태일 것이다. 따라서 비어있으면 Nice를 둘 중 하나라도 비어있지 않다면 Sad를 출력한다.