풀이
총 4가지 구현을 반복적으로 수행하다 내구도가 0 인 칸이 K 에 도달했을 경우까지의 단계를 출력하는 문제이다.
-
컨베이어 벨트가 이동하고 그 위의 로봇 역시 이동하기에 두 리스트 모두 수정해준 후 내리는 위치에 로봇이 도달했을 경우 해당 위치의 로봇을 제거해준다.
-
robot 리스트를 거꾸로 순회하면서 전진이 가능할 경우 로봇을 한칸 이동시켜준다. 마찬가지로 로봇이 내리는 위치에 도달했을 경우 해당 위치의 로봇을 제거해준다.
-
로봇이 올리는 위치에 생성된다. 이때 내구도가 0 이라면 생성하지 않는다.
-
위 모든 과정이 끝난 후 내구도가 0 인 칸이 K 개 이상이라면 반복문을 탈출하고 cnt 를 출력하고 K 개보다 적다면 다시 반복한다.
위 모든 과정을 while문에 담고 cnt 가 K 를 초과할 경우에 반복문을 탈출하면서 cnt 를 출력해주면된다.
소스코드
# 컨베이어 벨트 위의 로봇
import sys
input = sys.stdin.readline
n, k = map(int, input().split())
robot = [0] * n
belt = list(map(int, input().split()))
cnt = 1
while True:
# 1
b = belt.pop()
r = robot.pop()
belt.insert(0, b)
robot.insert(0, r)
robot[n-1] = 0
# 2
for i in range(n-1, 0, -1):
if robot[i] == 0 and belt[i] > 0 and robot[i-1] == 1:
robot[i] = 1
belt[i] -= 1
robot[i-1] = 0
robot[n-1] = 0
# 3
if belt[0] != 0:
robot[0] = 1
belt[0] -= 1
# 4
if belt.count(0) >= k:
print(cnt)
break
cnt += 1