그림과 같이 길이 N인 컨베이어 벨트 위에 길이가 2N인 벨트가 감겨있다. 내구도 A_i는 컨베이어 벨트 i번째 칸의 내구도이다.
이 위에 로봇을 올리려고 한다. 올리는 위치는 그림의 1, 내리는 위치는 그림의 N이다. 로봇은 컨테이너 벨트 위에서 이동 가능하고, 로봇을 올리거나 해당 칸으로 이동하면 내구도가 1 줄어든다.
이동 과정은 다음과 같다.
아니 이거 문제 설명이 넘 애매하다,,,~! 가장 처음 수행되는 단계가 1번째라길래 종료할때 이동과정 1,2,3,4 중에 어떤 과정 진행중이냐고 묻는줄 ㄱ-
그리고 2번에서 로봇 이동할때 로봇이 이동한 칸이 내리는 칸이면 바로 내려줘야됨
암튼 이거 빼면 시키는 흐름대로 구현하면 되는 문제입니다.
import sys
input = sys.stdin.readline
N, K = map(int, input().split())
durability = list(map(int, input().split())) # 컨베이어 칸 별 내구도
robots = [0 for _ in range(N)] # 컨베이어 위 로봇 위치
robot_count = 1
count = 0
answer = 1
def rotate(l, n):
return l[-n:] + l[:-n]
while True:
# 1번 과정
durability = rotate(durability, 1)
robots = rotate(robots, 1)
if robots[N-1] != 0:
# 로봇 내리기
robots[N-1] = 0
# 2번 과정
for i in range(N-2, -1, -1):
if robots[i] != 0 and robots[i+1] == 0 and durability[i+1] >= 1:
# 빈칸이고 내구성 1 이상이면
robots[i+1] = robots[i]
robots[i] = 0
durability[i+1] -= 1
if durability[i+1] == 0:
count += 1
if robots[N-1] != 0:
# 로봇 내리기
robots[N-1] = 0
# 3번 과정
if durability[0] != 0:
robots[0] = robot_count
robot_count += 1
durability[0] -= 1
if durability[0] == 0:
count += 1
# 4번 과정
if count >= K:
print(answer)
break
else:
answer += 1
def rotate(l, n):
return l[-n:] + l[:-n]
30분 !