코드

from collections import deque

def solution(bridge_length, weight, truck_weights):
    answer = 0
    dq = deque([0]*bridge_length)

    while len(truck_weights)!=0: # truck_weights 가 없어질 때까지 반복
        dq.popleft() # 한칸 이동

        # weight 보다 (deque의 합 + 다음 버스 무게)가 더 작으면, 한칸이동하고 다음 트럭 append
        if weight >= sum(dq) + truck_weights[0]:
            dq.append(truck_weights.pop(0)) # 다음 트럭 in
            answer += 1
        else :# 그렇지 않으면 한칸 이동
            dq.append(0)
            answer += 1

    answer += bridge_length # 마지막 남은 버스 이동 시간
    return answer

# bridge_length = int(input())
# weight = int(input())
# truck_weights = list(map(int, input().split()))
solution(bridge_length, weight, truck_weights)

풀이

큐를 이용해서 풀어보았다.

다리의 길이만큼 큐를 만들어주고 0을 채운 후,

트럭이 들어오면 큐 맨 앞을 빼주고, 맨 뒤에 대기중인 첫번째 트럭을 넣어준다.

 

다리를 건너고 있는 트럭이 나가자마자 대기중인 트럭이 들어오게 하려면,

대기중인 트럭이 들어오면 큐 맨 앞을 빼주는 게 아니라,

큐 맨 앞(다리를 건너고 있는 트럭)을 먼저 빼준 후에 대기중인 트럭을 넣어주어야 했다.

 

이것을 대기중인 트럭이 없을 때까지 반복하는 것으로 코드를 짰는데,

대기중인 트럭이 없으면 while문이 종료되어서,

대기중인 트럭이 마지막으로 하나만 남았을 때는 그냥 건너야 되는 다리의 길이만큼 더해주고 정답을 return 했다.

 

그랬더니 테스트케이스 하나가 시간 초과로 걸렸다...

다른 방법으로 풀어 봐야겠다.

 

복사했습니다!