[프로그래머스] 다리를 지나는 트럭 풀이

 


1. 문제

https://www.welcomekakao.com/learn/courses/30/lessons/42583

2. 풀이

  • 시뮬레이션으로 문제를 해결하면 됩니다
  • 다리 사이즈, 대기 트럭 만큼 deque 생성을 해줍니다.
  • 다리를 지나고 있는 트럭이 존재하지 않을 때 까지 while 문을 수행합니다.
    • 대기열에 트럭이 있고, 다리를 지나고 있는 트럭이 없는 경우에 해당 숫자는 0으로 채워집니다.
    • 시간을 1씩 증가시키면서, 다음 들어올 트럭이 다리에 있는 트럭의 무게의 합과 더하여 무게를 초과하지 않으면 다리에 있는 차에 넣고
    • 아닌 경우에는 다리에 들어오지 않은 차로 대기 큐에서 계속 기다리게합니다.
from collections import deque
def solution(bridge_length, weight, truck_weights):
    q = deque([0]*bridge_length) # 다리 사이즈 만큼 deque 생성
    truck_weights = deque(truck_weights) # 대기 트럭 만큼 deque 생성
    sec = 0
    q_sum = 0
    while q:                    # 다리를 지나고 있는 트럭이 존재하지 않을 때 까지     
        sec += 1                # 1씩 증가시켜가면서 시뮬레이션을 동작시킵니다.
        q_sum -= q.popleft()    
        if truck_weights:
            front = truck_weights.popleft() # 트럭 중에서 가장 빨리 나가야 하는 대기차의 무게와
            if q_sum+front<=weight:         # 다리에 있는 차의 총합 보다 적으면
                q.append(front)             # 다리에 있는 차에 추가시킵니다.
                q_sum += front
            else:
                truck_weights.appendleft(front) # 아닌 경우에는 다리에 있는 차만 앞으로 보냅니다.
                q.append(0)
    return sec