# 20055
from collections import deque
n, k = map(int, input().split())
arr = deque(list(map(int, input().split()))) # 2n개
places = deque([0] * n)
count = 0
while True:
# 1. 벨트가 각 칸 위에 있는 로봇과 함께 한 칸 회전
count += 1
arr.appendleft(arr.pop())
places.appendleft(places.pop())
# 하차
if places[-1] == 1:
places[-1] = 0
# 2. 가장 먼저 벨트에 올라간 로봇부터(가장 멀리 있는 로봇부터), 벨트가 회전하는 방향으로 한 칸 이동할 수 있다면(내구도) 이동.
for i in range(n-2, -1, -1):
if (places[i] == 1) and (places[i+1] == 0) and arr[i+1] > 0:
places[i], places[i+1] = 0, 1
arr[i+1] = arr[i+1] - 1
if places[-1] == 1:
places[-1] = 0
# 올리는 위치에 있는 칸의 내구도가 0이 아니면 올리는 위치에 로봇을 올린다.
if arr[0] > 0:
places[0] = 1
arr[0] = arr[0] - 1
# 내구도가 0인 칸의 개수가 K개 이상이라면 과정을 종료한다. 그렇지 않다면 1번으로 돌아간다.
if arr.count(0) >= k:
break
print(count)
우선, 제한이 2 <= N <= 100, 1 <= K <= 2N, 1 <= Ai <= 1000 으로 매우 여유롭다.
그래서 일단 그대로 구현해보았다.
문제 자체는 매우 쉬운 것 같은데 글을 이해하는데 좀 오래 걸렸다. 이렇게 어렵게 적어놓을 일인가 싶은..! 그대로 구현해서 좋은 코드인지는 잘 모르겠지만 맞았으니 죄책감 없이 넘어가도록 하겠습니다.
