이번 문제는 deque를 이용하여 해결하였다. 우선 조건대로 deque의 rotate()함수를 이용하여 벨트와 로봇을 한칸씩 이동시키고, n-1인덱스에 위치하는 로봇을 없애준다. 그리고 로봇 리스트를 뒤에서부터 순회하며 다음 칸에 로봇이 없고 다음 칸의 내구도가 0보다 클 때에만 로봇을 한칸 이동시켜준다. 이때에도 로봇이 n-1인덱스에 위치하게 될 수 있으므로 n-1위의 로봇을 없애준다. 그리고 올리는 위치에 로봇이 없고, 올리는 위치의 내구도도 0보다 크다면 로봇을 하나 올려준다.
robot[-1]
을 0으로 갱신한다.robot[i]
가 1일 경우,robot[i+1]
이 0이고, belt[i+1]
이 0보다 클 경우,robot[i]
와 robot[i+1]
을 0과 1로 갱신한다. (로봇의 이동)belt[i]
를 1 감소시킨다. (로봇의 이동으로 인한 내구도 감소)robot[-1]
을 0으로 갱신한다.belt[0]
이 0보다 크고, robot[0]
이 0일 경우,robot[0]
을 1로 갱신한다.belt[0]
을 1 감소시킨다.from collections import deque
n, k=map(int, input().split())
belt=deque(list(map(int, input().split())))
robot=deque([0]*n)
answer=0
while True:
belt.rotate(1)
robot.rotate(1)
robot[-1]=0
for i in range(n-2, -1, -1):
if robot[i]==1:
if robot[i+1]==0 and belt[i+1]>0:
robot[i], robot[i+1]=0, 1
belt[i+1]-=1
robot[-1]=0
if belt[0]>0 and robot[0]==0:
robot[0]=1
belt[0]-=1
answer+=1
if belt.count(0)>=k:
break
print(answer)