일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 백준 16918번
- 모각코
- javascript
- 다이나믹프로그래밍
- SQL
- 백준 15787번
- java_programming
- 백준 1331번
- 머신러닝과 딥러닝
- 백준 1253번
- 그래프
- 명품자바
- HUFS 모각코 캠프
- Python
- 백준 18310번
- 다이나믹 프로그래밍
- SWEA 15612번
- react
- 알고리즘
- 그리디
- 백준 2512번
- 백준
- 자바
- 깃헙
- 백준 3085번
- ubuntu
- 백준 17451번
- AWS
- MySQL
- 백준 1987
Archives
- Today
- Total
차곡차곡
[BOJ/Python] 백준 12789번 - 도키도키 간식드리미 본문
백준 #12789 도키도키 간식드리미
from collections import deque
import sys
input = sys.stdin.readline
n = int(input()) # 학생 수
num = deque(list(map(int, input().split()))) # 번호표
now = 1 # 현재 받아야 하는 번호
q = [] # 빈 공간
while num:
if now == num[0]:
num.popleft()
now += 1
elif len(q) != 0 and now == q[-1]:
q.pop()
now += 1
else:
if len(q) == 0 or (len(q) != 0 and q[-1] > num[0]):
q.append(num.popleft())
else:
print("Sad")
exit(0)
if len(q) != 0:
for i in range(len(q)-1, -1, -1):
if now == q[i]:
now += 1
else:
print("Sad")
exit(0)
print("Nice")
- 현재 간식을 받아야 하는 사람의 번호를 변수(now)에 담아둔다.
- 순서대로 간식줄(num) 맨 앞에 있는 사람이 해당 번호와 같다면 간식을 배부하고 간식줄에서 뺀다.
- 같지 않을 경우 빈 공간(q) 마지막에 있는 사람의 번호와 같은지 비교한다. 같다면 간식을 배부하고 빈 공간에서 뺀다.
- 즉, 간식줄 맨 앞 혹은 빈 공간 맨 뒤에 있는 사람이 해당 번호와 같다면 간식을 배부하고 리스트에서 빼는 것!
- 둘 다 같지 않다면 간식줄에 있는 사람을 아래 빈 공간에 보낸다.
- 이때 빈 공간에 사람이 있을 경우 해당 사람의 번호가 새로 들어오는 사람의 번호보다 커야 한다. 클 경우 “Sad”를 출력하고 종료한다. (번호가 작으면 번호표 순서대로 배부할 수 없기 때문)
- 간식줄에서 배부가 끝나면 빈 공간을 본다. 빈 공간에 사람이 있을 경우 뒤부터 차례대로 현재 받아야 하는 사람의 번호와 같은지 비교한다.
- 한 번이라도 맞지 않을 경우 번호표 순서대로 배부할 수 없는 경우로 “Sad”를 출력하고 종료한다.
- 빈 공간에서도 배부가 끝나면 번호표 순서대로 간식 배부에 성공한 것으로 “Nice”를 출력한다.
☝🏻 주의 예제
5
1 3 2 4 5
>> "Nice"
'CS > Algorithm' 카테고리의 다른 글
[BOJ/Python] 백준 18115번 - 카드 놓기 (0) | 2022.07.01 |
---|---|
[BOJ/Python] 백준 13022번 - 늑대와 올바른 단어 (0) | 2022.07.01 |
[BOJ/Python] 백준 17827번 - 달팽이 리스트 (0) | 2022.05.19 |
[BOJ/Python] 백준 11866번 - 요세푸스 문제0 (0) | 2022.05.18 |
[BOJ/Python] 백준 1021번 - 회전하는 큐 (0) | 2022.05.17 |
Comments