[python] 백준 13335번 트럭

Youngseo Lee·2024년 10월 5일

구현

목록 보기
2/2

백준 13335번 트럭

https://www.acmicpc.net/problem/13335

문제

풀이

# n은 다리를 건너는 트럭의 수, w는 다리의 길이, 그리고 L은 다리의 최대하중
from collections import deque 
n,w,l = map(int, input().split())
trucks = list(map(int, input().split()))
trucks = deque(trucks)
bridge = deque([0] * w)

total_weight = 0
second = 0

while bridge:
    second += 1
    # 왼쪽에서 다리를 다 통과한 트럭의 무게를 뺴준다
    exited_truck = bridge.popleft() 
    total_weight -= exited_truck

    # 대기 중인 트럭이 존재할 때
    if trucks:
        if total_weight + trucks[0] <= l:
            started_truck = trucks.popleft()
            total_weight += started_truck
            bridge.append(started_truck)
        
        else:
            bridge.append(0)

print(second)
    

📌 주의

일단 bridge 의 길이로 while 문을 돌리는 발상이 어렵다. bridge 길이만큼 0을 초기설정으로 두었다면, 이미 반은 성공한 것.

그 다음에 if trucks 적는 것을 까먹게 된다. 대기 중인 트럭이 없는데 계속 확인을 하게 된다면, 무한루프에 갇혀버릴 것이다.

마지막으로 deque 와 total_weight 를 이용하면 시간 절약에 도움이 된다. 프로그래머스에서는 total_weight 대신 계속 sum(bridge) 해서 풀었는데 시간 초과 에러가 뜨더라.

profile
leenthepotato

0개의 댓글