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를 출력한다.