인지용

[백준] 12789 도키도키 간식드리미 [python, 실버2, 스택] 본문

알고리즘

[백준] 12789 도키도키 간식드리미 [python, 실버2, 스택]

인지용 2026. 1. 14. 15:16

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

 

 

import sys

def input():
    return sys.stdin.readline().strip()


n = int(input())
arr = list(map(int, input().split()))
stack = []
result = []
target = 1

for i in range(n):
    if arr[i] == target:
        result.append(arr[i])
        target += 1

        while stack and stack[-1] == target:
            result.append(stack.pop())
            target += 1
    else:
        stack.append(arr[i])

if len(result) == n:
    print("Nice")
else:
    print("Sad")

 


 

현재 번호표와 줄 서있는 곳 맨 앞사람의 번호표가 다르면 일단 임시 공간에 넣는다.

이걸 현재 번호표와 일치하는 사람이 나올 때 까지 반복한다.

일치하는 사람을 찾았다면 다음 번호표를 가진 사람은 임시 공간에 있을 수 있기에 임시 공간도 확인해본다.

이걸 반복해서 간식 받은 사람의 수를 비교해보면 된다.

(중간 while문을 엉뚱한데 넣어서 많이 헤맸다..)