다리를 지나는 트럭

210723

'''
https://programmers.co.kr/learn/courses/30/lessons/42583
다리를 지나는 트럭
[풀이]
1. 다리를 지나는 시간은 이전 트럭이 출발한 시점부터 자신이 출발한 시점까지의 대기 시간을 모두 합 + 다리 길이 + 1 이다.
'''
from collections import deque

def solution(bridge_length, weight, truck_weights):
    b, w, t = bridge_length, weight, truck_weights
    time = deque([1])
    wsum = deque([t[0]])
    sec = 0
    for v, i in enumerate(t[1:]):
        if i <= weight - sum(wsum):
                time.append(1)
                wsum.append(i)
                if sum(time) - time[0] == b:
                    sec += time.popleft()
                    wsum.popleft()
                continue
        if i <= weight - sum(wsum) + wsum[0]:
            sec += time.popleft()
            wsum.popleft()
            time.append(b - sum(time))
            wsum.append(i)
            continue
        while i > weight - sum(wsum):
            sec += time.popleft()
            wsum.popleft()
        time.append(b - sum(time))
        wsum.append(i)
    return sum(time) + b
'''
100%의 모든 사람들이 1초에 대해서 반복문을 설정한데 비해
트럭의 순서에 대해서 반복문을 돌리려고 했음
=> 실제 1초에 대해서 구현한 대부분 코드는 1000.00ms가 넘는다.
=> 다음과 같이 0.1ms가 걸리지 않아 결과적으로 엄청나게 빠른 코드 생성
=> 실전에서 다음과 같이 풀었으면 스포트라이트를 받을 것 같다. 제한 시간 내에는 불가능 할 듯.

테스트 1 〉	통과 (0.01ms, 10.4MB)
테스트 2 〉	통과 (0.02ms, 10.3MB)
테스트 3 〉	통과 (0.01ms, 10.3MB)
테스트 4 〉	통과 (0.40ms, 10.3MB)
테스트 5 〉	통과 (0.90ms, 10.3MB)
테스트 6 〉	통과 (0.79ms, 10.3MB)
테스트 7 〉	통과 (0.01ms, 10.3MB)
테스트 8 〉	통과 (0.02ms, 10.3MB)
테스트 9 〉	통과 (0.48ms, 10.4MB)
테스트 10 〉	통과 (0.02ms, 10.2MB)
테스트 11 〉	통과 (0.02ms, 10.3MB)
테스트 12 〉	통과 (0.07ms, 10.2MB)
테스트 13 〉	통과 (0.07ms, 10.3MB)
테스트 14 〉	통과 (0.01ms, 10.3MB)
'''

Last updated

Was this helpful?