현제의 현재이야기
[백준/python] 12789 - 도키도키 간식드리미 본문
from collections import deque
a = int(input())
current = deque(map(int, input().split()))
cnt = 1
solo_count = 0 # 한줄로 서있는 스택의 개수
while cnt < a:
if solo_count != len(current) and current[0] == cnt:
current.popleft()
cnt += 1
elif solo_count >= 1 and current[-1] == cnt:
current.pop()
solo_count -= 1
cnt += 1
else:
if solo_count == len(current):
if current[-1] != cnt:
print('Sad')
break
current.rotate(-1)
solo_count += 1
if cnt == a:
print('Nice')
| 알고리즘
- 검사해야하는 수의 번째인 cnt가 a보다 작을 때 까지 while 반복
- 만약 스택(밑으로 한줄로 줄서는)에 모든 사람이 오지 않았고 현재 줄 서 있는 맨 앞 사람이 cnt라면 팝하고 cnt + 1
- 만약에 스택에 한 사람이라도 있고 스택 맨 뒷사람이 cnt와 같다면 pop하고 스택 카운트 -1하고 cnt 1 증가
- 그게 아니라면 왼쪽으로 로테이트 1회하고 스택 1회 증가
단, 줄 서는 사람들이 모두 스택에 들어왔고, 스택 맨 뒷사람이 cnt와 같지 않다면 스택 앞 사람들은 간식을 받지 못함으로 sad를 출력
5. while 문을 빠져나오고 cnt가 a, 즉 모두에게 간식을 나누어 주었다면 nice 출력
그냥 데크 여러개 두고 넣고 빼고 할 수 있었는데 로테이트와 데크 하나로 만들고 싶었다. 괜히 더 어려운 길일 지도?
처음에 8줄에 solo_count != len(current), 즉 스택에 모든 사람들이 안왔을 때를 가정하지지 않아서
이 예시가 nice가 떴었다.(차례로 current, cnt, solo_count)
왜냐하면 8줄에 저것이 없으면
이것과 같이 줄서있는 사람이 없고 스택에만 있음에도 불구하고 8줄의
current[0] == cnt가 실행되어서 스택의 첫번째 사람을 조회해버린다. 그러면 곤란
'algorithm' 카테고리의 다른 글
[백준/python] 18115 - 카드놓기 (0) | 2022.07.05 |
---|---|
[백준/python] 13022 - 늑대와 올바른 단어 (0) | 2022.06.29 |
[백준/python] 16918 - 봄버맨 (0) | 2022.06.25 |
[백준/python] 17952 - 과제는 끝나지 않아 (0) | 2022.06.25 |
[백준/python] 2346 -풍선터뜨리기 (0) | 2022.06.25 |
Comments