https://www.acmicpc.net/problem/12789
문제
문제해석
데큐를 이용하여 순서를 나타내고 대기열 공간은 stack을 활용하여 순서대로 나갈 수 있는지 확인하는 문제이다.
코드
import collections
N = int(input())
q = collections.deque(map(int, input().split()))
tmp = list()
min_value = 1
while q:
if q[0] != min_value:
tmp.append(q[0])
q.popleft()
else:
q.popleft()
min_value += 1
while tmp:
if tmp[-1] == min_value:
tmp.pop()
min_value += 1
else:
break
if not q and tmp == []:
print("Nice")
else:
print("Sad")
문제풀이
처음에는 줄서 있는 공간과 대기열 공간 모두 deque로 구현했었다. 하지만 대기열 공간을 제일 마지막에 들어왔던 사람이 나가는 FIFO 구조이기 때문에 stack을 활용해도 문제가 없어 stack으로 구현했다.
줄 서 있는 공간은 deque를 이용하여 popleft를 해줘 count를 해주고 대기열 공간에서 마지막에 들어오는 사람이 순서에 맞다면 pop을 해주는 방식으로 구현했다. 만약 순서대로 나갔다면 deque와 stack 모두 비어있는 상태일 것이다. 따라서 비어있으면 Nice를 둘 중 하나라도 비어있지 않다면 Sad를 출력한다.
'Koala - 11기 > 기초 알고리즘 스터디' 카테고리의 다른 글
[백준/python3] 2852번: NBA농구 (0) | 2023.08.28 |
---|---|
[백준/C++] 17608번: 막대기 (0) | 2023.08.27 |
[백준/python3] 18406번 (0) | 2023.08.14 |
[백준 / C++] 1874번: 스택 수열 (0) | 2023.08.13 |
[백준/Python] 7795번: 먹을 것인가 먹힐 것인가 (0) | 2023.08.13 |