https://www.acmicpc.net/problem/20055
로봇과 벨트를 deque를 사용해서 회전하고 (음수이면 왼쪽 양수이면 오른쪽으로 회전)
로봇이 내려가는 부분을 로봇 배열의 마지막 요소로 0으로 설정
로봇을 이동하기 전에 다음칸에 로봇을 이동할 수 있는지, 내구도 확인
로테이션이 한바퀴 돌때마다 result + 1
belt.count(0)으로 내구도가 0인 칸의 개수를 세고 k개가 되면 루프 종료 후 정답 출력
import sys
input = sys.stdin.readline
from collections import deque
n, k = map(int,input().split())
belt = deque(list(map(int, input().split()))) # 내구도
robot = deque([0] * n)
result = 0
while 1:
belt.rotate(1)
robot.rotate(1)
robot[-1] = 0 # 로봇이 내려가는 부분
if sum(robot): # 로봇이 존재하는지 확인
for i in range(n-2, -1, -1): # 로봇이 내려가는 부분인 n-1이 아닌 n-2 ~ 0번째 index까지 확인
if robot[i] == 1 and robot[i+1] == 0 and belt[i+1] >= 1: # 로봇이 있음 & 다음칸에 로봇이 없음 & 다음칸의 벨트의 내구도가 1이상
robot[i+1] = 1 # 이동
robot[i] = 0 # 기존에 있던자리 0 으로 처리
belt[i+1] -= 1 # 벨트의 내구도 감소
robot[-1] = 0 # 로봇이 벨트의 마지막 칸으로 이동했을 경우, 위로 올림
if robot[0] == 0 and belt[0] >= 1: # 가장 왼쪽에 로봇이 없음 & 내구도는 남아있음
robot[0] = 1 # 로봇 올리기
belt[0] -= 1 # 내구도 감소
result += 1
if belt.count(0)>= k:
break
print(result)