문제 설명 및 제한사항
아이디어 및 해결 방법
코드
from collections import deque
def solution(bridge_length, weight, truck_weights):
# 초 단위로 각 트럭 별 위치를 모니터링할 수도 있겠지만,
# 좀 더 효율적인 방법을 찾아봅시다.
#
# 리스트 하나와 정수 값 하나를 관리합니다.
# 리스트 out[t]는 시간 t때 트럭이 탈출하여 줄어드는 weight의 배열입니다.
# 정수 값은 현재 다리 위에 올라가 있는 트럭의 무게 총합입니다.
i, t = 0, 1
q, weightsum = deque(), 0
while i < len(truck_weights):
# 다리 위에 올라갈 수 있을 만큼 트럭을 올려보냅니다.
while i < len(truck_weights) and weightsum + truck_weights[i] <= weight:
# t때 올라간 트럭의 탈출 시간은 t + bridge_length 입니다.
q.append( (truck_weights[i], t + bridge_length) )
weightsum += truck_weights[i]
i += 1
t += 1
# 시간이 t가 되어서 트럭이 탈출해야 하는 상황을 처리합니다.
if q[0][1] == t:
w, t = q.popleft()
weightsum -= w
# 트럭이 탈출하는 시점으로 이동합니다.
if len(q) > 0:
w, t = q.popleft()
weightsum -= w
# 큐의 트럭들을 모두 탈출시킵니다.
while len(q) > 0:
w, t = q.popleft()
return t
Python
복사
출처
프로그래머스 코딩테스트 연습 https://school.programmers.co.kr/learn/challenges