문제 링크 : programmers.co.kr/learn/courses/30/lessons/42583
대기중인 트럭과 다리를 지나가고 있는 트럭들은 큐에 저장하였고, 다리를 지나간 트럭들은 리스트에 저장하였다. while문에서는 먼저 지나가고 있는 트럭 중 끝에 도달한 트럭이 있으면 다리를 지나간 트럭 리스트로 옮긴다. 다리의 끝에 도달했는지 판단하는 조건은 트럭이 1초에 1만큼 움직이므로 (현재 초) - (트럭이 다리에 들어올 때 초) >= bridge_length로 하였다.
그리고 대기중인 트럭이 들어왔을 때 weight를 넘게 되면 다리를 지나가는 트럭 큐에 추가하지 않고, 넘지 않으면 추가한다. 추가하는 내용은 (트럭의 weight, 트럭이 다리를 진입할 때의 초)이다.
from collections import deque
def solution(bridge_length, weight, truck_weights):
answer = 0
num_truck = len(truck_weights)
waiting_truck = deque(truck_weights) # 대기중인 트럭
passing_truck = deque() # 다리를 지나는 트럭
passed_truck = [] # 다리를 지난 트럭
weight_sum = 0
while len(passed_truck) < num_truck:
answer += 1
if len(passing_truck) > 0:
first_passing_truck = passing_truck.popleft()
if answer - first_passing_truck[1] >= bridge_length:
weight_sum -= first_passing_truck[0]
passed_truck.append(first_passing_truck[0])
else:
passing_truck.appendleft(first_passing_truck)
if len(waiting_truck) > 0:
cur_weight = waiting_truck.popleft()
weight_sum += cur_weight
if weight_sum <= weight:
passing_truck.append((cur_weight, answer)) # (weight, 진입한 시점의 초)
else:
weight_sum -= cur_weight
waiting_truck.appendleft(cur_weight)
return answer
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] - 완주하지 못한 선수 (0) | 2021.03.20 |
---|---|
[프로그래머스] 단어 변환 (0) | 2021.02.05 |
[프로그래머스] 타겟 넘버 (0) | 2021.02.05 |
[프로그래머스] - 신규 아이디 추천 (0) | 2021.01.25 |
[프로그래머스] 구명보트 (0) | 2021.01.05 |