문제

관람차는 n개의 칸으로 이루어져있고, 한바퀴 도는데 n분이 소요된다. (관람차의 속도는 일정하고, 인접한 칸 사이의 거리도 일정하다.)


관람차의 이용객들은 각자 원하는 시간동안 관람차에 탑승한다.(지상 출입구에서만 탑승 가능) 따라서, 탑승구에 도착한 칸이 비어있거나, 먼저 탄 사람이 내리는 경우, 해당 칸에 새로운 이용객이 탑승 가능하다.


모든 사람이 관람차를 이용하고 내리려면 몇 분 이용해야하는가?

제한사항

  • 1 <= 이용객 수 = times의 길이 <= 1,000
    • 1 <= times[i] <= 1,000
    • times[i]는 i + 1번째로 줄 선 사람이 관람차를 이용하려는 시간
  • 1 <= 관람차의 크기 = n <= 500

입출력 예

times n result
[4, 2, 1] 2 5
[8, 7, 6, 3, 4] 4 11
[13, 7, 2] 5 15
[1, 2, 3, 4 ,5, 6, 7] 1 28

Source

from collections import deque

def calculate_time(times, n):
    time_elapsed = 0
    ride_state = [0] * n

    q = deque(times)
    ride_state[0] = q.popleft()

    while q or any(ride_state):
        time_elapsed += 1

        for i in range(n):
            if ride_state[i] > 0:
                ride_state[i] -= 1

        if ride_state[time_elapsed % n] == 0 and q:
            ride_state[time_elapsed % n] = q.popleft()

    return time_elapsed

print(calculate_time([4, 2, 1], 2))
print(calculate_time([8, 7, 6, 3, 4], 4)) # 틀림
print(calculate_time([13, 7, 2], 5))
print(calculate_time([1, 2, 3, 4 ,5, 6, 7], 1)) # 틀림