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

eun·2024년 1월 22일

문제 12789

위 문제를 먼저 이해해보자.

  • 1열로 서있는 사람들은 각자의 번호를 가지고 있다. 1번을 가진 사람부터 차례로 입장하려고 한다.
  • 복도는 한 사람만이 지나갈 수 있고 한 쪽에는 대기열이 있다.
  • 만약 1번을 가진 사람부터 n번을 가진 사람까지 차례로 간식을 받을 수 있다면 'Nice'를, 받을 수 없다면 'Sad'를 출력하는 문제이다.
  • 스택과 큐의 개념을 활용하여 문제를 풀어보자
# 12789

import sys

n = int(sys.stdin.readline())

lst = list(map(int, sys.stdin.readline().split()))

cnt = 1
stack = []

while lst:
    if lst[0] == cnt:
        lst.pop(0)
        cnt += 1
    else:
        stack.append(lst.pop(0))
    
    while stack:
        if stack[-1] == cnt:
            stack.pop()
            cnt += 1
        else:
            break


if len(stack) == 0:
    print("Nice")
else:
    print("Sad")

문제가 복잡해 보였지만 생각보다 쉽게 해결이 가능했다. lst[0]을 구하는 코드에서 에러가 발생해 어려움을 겪었지만, while lst: 라는 반복문을 통해 해결 가능했다.

0개의 댓글