문제 설명이 다소 꼬여 있어서 헤맸지만, 테스트 케이스를 풀면서 bridge_length에 따라서 다리 위에서 머무는 시간(즉 큐에 들어와서 나갈 때까지)이 결정됨을 알 수 있었다. 다리, 즉 큐에 삽입될 수 있는 조건은 다음과 같다.
이를 만족할 때 큐에 삽입 가능한데, 나의 경우 편리함을 위해 check라는 리스트를 함께 두면서 얼마 동안 다리 위에 있는지(실제로는 아마 다리 위를 주행하고 있겠지만) 확인했다. 본 문제에서 bridge_length를 통해 다리 위에 있는 최대 트럭 수와 다리를 빠져나가는 데 걸리는 시간을 모두 결정하다보니 (물론 현실 상에서는 그렇지 않고) 다소 헷갈렸던 것 같다.
def solution(bridge_length, weight, truck_weights):
queue = [truck_weights.pop(0)]
check = [0]
total = 1
while queue:
total += 1
if queue:
for i in range(len(check)):
check[i] += 1
if check[0] == bridge_length:
check.pop(0)
queue.pop(0)
if truck_weights and sum(queue) + truck_weights[0] <= weight and len(queue) < bridge_length:
queue.append(truck_weights.pop(0))
check.append(0)
return total