코딩테스트 연습 - 다리를 지나는 트럭

Gyuhan Park·2021년 7월 26일
0

코딩테스트 정복

목록 보기
16/47

코딩테스트 연습 - 다리를 지나는 트럭

다리에 올라갈 수 있는 트럭 수, 다리가 견딜 수 있는 무게, 트럭 별 무게가 주어졌을 때, 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 반환하라.

# 정답코드

처음에는 truck_weights에서 다 꺼내올 때까지 loop를 돌고 다음 트럭과 현재 트럭의 무게를 더해 weight와 비교한 뒤 출발할 지 말 지만 결정하면 된다고 생각했다. 근데 언제 시간을 더할 것이고 다리 길이만큼을 어떻게 표현하고 또 다음 트럭이 없을 경우 조건문이 겹치고.............코드가 뒤죽박죽이 되었다.

그래서 참고한 부분이 다리를 0으로 채운 리스트로 만드는 것이다. bridge_length가 5라면, [0,0,0,0,0]을 빈 다리라 생각하고 앞의 0을 빼주면서 트럭을 하나씩 뒤에 추가하는 것이다.

무게 조건이 맞으면 다리에 올리고 안맞으면 0을 뒤에 넣어 다리를 건너고 있는 트럭을 앞으로 보낸다. 남은 트럭이 없으면 if trucks 를 벗어나 다리 위에 있는 트럭을 앞으로 쭉쭉 보낸다. 맨 뒤에 있는 트럭까지 보내면 정답을 반환한다.

#sum()은 리스트의 모든 요소를 순회하기 때문에 시간이 오래걸리므로 변수를 사용하라!

from collections import deque

def solution(bridge_length, weight, truck_weights):
    time = 0
    bridge_weight = 0
    bridge = deque([0]*bridge_length)
    trucks = deque(truck_weights)
    
    while len(bridge) != 0:
        left = bridge.popleft()
        bridge_weight -= left
        time += 1
        if trucks:
            if bridge_weight + trucks[0] <= weight:
                truck = trucks.popleft()
                bridge_weight += truck
                bridge.append(truck)
            else:
                bridge.append(0)
                  
    return time
profile
단단한 프론트엔드 개발자가 되고 싶은

0개의 댓글