알고리즘/자료구조

다리를 지나는 트럭 (Python)

위대한루루 2020. 3. 30. 14:56

https://programmers.co.kr/learn/courses/30/lessons/42583?language=python3

 

 

다리를 큐로 생각하고 푸는 문제이다.

트럭은 1초에 1씩 이동한다고 했는데, 이것을 실제로 지나가는 것처럼 하나하나 원소를 밀면 (다리 길이 X 트럭의 갯수)만큼의 시간이 걸려서 오래 걸리므로 간단하게 큐에서 맨 앞을 빼고 맨 뒤에 0을 추가하는 방식으로 트럭을 밀어주었다. 이렇게 하면 (트럭의 갯수)만큼의 시간이 걸리게 된다. (deque를 쓸 때의 이야기임!!)

그리고 조건에 맞으면 다리 맨 뒤에 추가한 0의 자리에 대기열에 있던 새로운 트럭을 넣도록 했다.

반복문은 대기열에 트럭이 남아있을 동안 진행되므로, 마지막 트럭이 다리에 들어선 순간 끝나게 된다. 마지막 트럭까지 다리를 모두 건넜을 때의 시간을 계산해야 하므로 결과값에 다리 길이를 추가해서 리턴하도록 했다. 

from collections import deque


def solution(bridge_length, weight, truck_weights):
    waiting = deque(truck_weights)
    bridge = deque([0 for _ in range(bridge_length)])  # queue
    answer = 0
    total = 0

    while waiting:
        total -= bridge.popleft()
        bridge.append(0)

        if total + waiting[0] <= weight:
            new_truck = waiting.popleft()
            total += new_truck
            bridge[-1] = new_truck

        #print(bridge)
        answer += 1

    answer += bridge_length
    return answer


#print(solution(2, 10, [7, 4, 5, 6]))
#print(solution(100, 100, [10]))
#print(solution(100, 100, [10, 10, 10, 10, 10, 10, 10, 10, 10, 10]))