12789번: 도키도키 간식드리미
인하대학교 학생회에서는 중간, 기말고사 때마다 시험 공부에 지친 학우들을 위해 간식을 나눠주는 간식 드리미 행사를 실시한다. 승환이는 시험 기간이 될 때마다 간식을 받을 생각에 두근두
www.acmicpc.net
코드
n = int(input())
nums = list(map(int, input().split()))
stack = []
cnt = 1
for i in range(n):
if cnt == nums[i]: # 순서가 맞는 사람
cnt += 1
else: # 순서 안 맞는 사람
while stack: # stack에서 나갈 수 있는 사람 나가기
if stack[-1] == cnt:
stack.pop()
cnt += 1
else:
break
stack.append(nums[i])
# stack에 남은 사람들 중 나올 수 있는 사람
while stack:
if stack[-1] == cnt:
stack.pop()
cnt += 1
else:
break
if stack:
print("Sad")
else:
print("Nice")
반복문을 돌며 순서가 맞는 사람은 바로 보내고, 순서가 맞지 않는 사람은 stack으로 보낸다. 이때 stack의 top에 있는 사람부터 아래로 차례대로 조사하여 현재 호명된 번호인 cnt와 일치하는 사람은 모두 내보낸 뒤에 nums[i]를 넣어야 한다.
그리고 마지막에 stack에 남아있던 사람들도 한 번 다시 조사하여 번호대로 나갈 수 있는 사람은 모두 내보낸다.
이렇게 했는데도 stack에 남은 사람들이 있다면 그건 모든 사람이 순서대로 간식을 받을 수 없다는 것이다.
'문제풀이 > 자료구조' 카테고리의 다른 글
[Python/파이썬] 백준 10815번 숫자 카드 (0) | 2024.03.11 |
---|---|
[Python/파이썬] 백준 9536번 여우는 어떻게 울지? (0) | 2024.03.06 |
[Python/파이썬] 백준 5397번 키로거 (0) | 2024.01.14 |
[Python/파이썬] 백준 3986번 좋은 단어 (1) | 2023.12.18 |
[Python/파이썬] 백준 18115번 카드 놓기 (0) | 2023.11.28 |