728x90
📌문제 출처
백준 단계별 문제풀이 : 스택, 큐, 덱 단계
https://www.acmicpc.net/problem/12789
❓ 문제
📗 풀이 코드
'''
현재 줄을 stack라고 하자.
while 문 range(1, 마지막 학생번호) 진행
nums[0]이 i와 같다면 다음 while문 진행
i와 다르고 i==wait_stack[-1] 이라면 wait_stack.pop()하고 다음 while문 진행
둘 다 아니라면 stack.pop(0)값을 대기열 wait_stack에 append
while 문이 종료되었는데 wait_stack이나 stack가 남아있다면 실패
'''
input = open(0).readline
def solution(n,nums):
wait_stack = [] # 후보 대기열
i = 1
while i <= n : # 대기열 번호가 n보다 크면 종료
if nums and i == nums[0] : # 현재 대기열이 있고, 원래 순서와 같다면
nums.pop(0) # 현재 대기열 맨 앞 순서 통과
i += 1 # 대기열 순서 넘기기
elif wait_stack and i == wait_stack[-1]: # 후보 대기열이 있고 맨 앞 순서와 같다면
wait_stack.pop()
i += 1 # 대기열 순서 넘기기
elif nums : # 어느 대기열의 순서도 맞지 않는데 현재 대기열이 있다면
wait_stack.append(nums.pop(0)) # 현재 대기열에서 후보 대기열로 넘어가기
else : # 어느 대기열의 순서도 맞지 않고 현재 대기열도 없다면
break
return 'Sad' if nums or wait_stack else 'Nice'
if __name__ == '__main__':
n = int(input())
nums = list(map(int,input().split()))
print(solution(n,nums))
'파이썬 문제풀이' 카테고리의 다른 글
[백준 파이썬] 2346 풍선 터뜨리기 (0) | 2023.10.13 |
---|---|
[백준 파이썬] 28279 덱 2 (0) | 2023.10.13 |
[백준 파이썬] 28278 스택2 (0) | 2023.10.13 |
[백준 파이썬] 2805 나무자르기 (0) | 2023.10.13 |
[백준 파이썬] 2579 계단오르기 (0) | 2023.10.13 |