📃 문제
[BOJ] 컨베이어 벨트 위의 로봇 🔗링크
❓ 문제 접근
- 문제는 4가지 동작으로 나뉘고 간단하게 설명하자면,
① 벨트, 로봇이 한 칸 회전한다.
② 가장 먼저 벨트에 올라간 로봇부터 앞으로 이동이 가능하면 한 칸 이동한다.
(로봇이 없는지, 내구도가 남아있는지 확인)
③ 올리는 위치에 칸의 내구도가 남아 있다면 로봇을 올린다.
④ 내구도가 0인 칸의 개수가 K개 이상이면 종료한다.
🧠 풀이
import sys
from collections import deque
input = sys.stdin.readline
N, K = map(int, input().split())
conveyor = deque(list(map(int, input().split())))
boxRobot = deque([0]*N)
count = 0
while(True):
count += 1
conveyor.rotate(1)
boxRobot.rotate(1)
boxRobot[-1] = 0
if sum(boxRobot):
for idx in range(N-2, -1, -1):
if(boxRobot[idx] and boxRobot[idx+1] == 0 and conveyor[idx+1]):
boxRobot[idx] = 0
boxRobot[idx+1] = 1
conveyor[idx+1] -= 1
boxRobot[-1] = 0
if(conveyor[0]):
boxRobot[0] = 1
conveyor[0] -= 1
if(conveyor.count(0) >= K):
break
print(count)