https://www.acmicpc.net/problem/20055
from collections import deque
n, k = map(int, input().split())
belt = deque(list(map(int, input().split())))
robot = deque([0] * n)
step = 0
while 1:
belt.rotate(1)
robot.rotate(1)
# 회전
robot[-1] = 0
# 로봇 아웃
if sum(robot):
# 로봇이 있으면
for i in range(n-2, -1, -1):
# -1번째는 무조건 아웃했으니까 -2번째부터 시작임
if robot[i] == 1 and robot[i + 1] == 0 and belt[i+1] >= 1:
robot[i+1] = 1
robot[i] = 0
belt[i+1] -= 1
# 로봇이 한칸 이동했으니까 내리는 위치에 올라온 로봇도 아웃
robot[-1] = 0
if robot[0] == 0 and belt[0] >= 1:
# 로봇 올리기
robot[0] = 1
belt[0] -= 1
step += 1
if belt.count(0) >= k:
break
print(step)
좀 어지러운 문제였다.
deque 모듈에 rotate라는 기능이 있는지 몰라서 벨트를 Top,bottom이라는 배열 두개로 나누어 진행했는데 관리해야 할 배열이 로봇 배열까지 총 3개가 되니 너무 어지러웠다...
다른 사람의 코드가 더 깔끔해보이긴하다.