
문제를 보고 스택 문제라고 생각을 했다. 파이썬으로는 스택을 어떻게 풀어야하는지 몰라서 찾아봤는데 그냥 append와 pop을 사용하는거 같았다.
문제가 어렵지는 않은데 헷갈린 부분이 있었다.
처음에 보고 기존 대기열에 있는걸 먼저 다 끝내고 새로운 대기열을 보는건 줄 알았는데,
그게 아니라 같이 보는거였다.
n = int(input())
arr = list(map(int, input().split()))
stack = []
num = 1
for i in arr:
# 간식 받을 사람이 아니면 새로운 대기열에 넣고
if i > num:
stack.append(i)
# 간식 받을 사람이면 num을 +1
elif i == num:
num += 1
# 새로운 대기열에 사람이 있는지 확인하고
while stack:
# 새로운 대기열의 마지막 사람이 간식 받을 사람이면 삭제하고 num을 +1
if stack[-1] == num:
stack.pop()
num += 1
else:
break
# 새로운 대기열에 사람이 없으면 승환이는 간식을 먹을 수 있음
if not stack:
print("Nice")
else:
print("Sad")
간단하게 주석으로 설명을 해봤는데
num이라는 변수에 값을 1로 해서 기존 대기열의 리스트들과 비교를 해서 순서대로 뽑고
동시에 새로운 대기열에도 비교를 해서 순서대로 내보내는 코드를 작성했다.