• [코테 연습] 다리를 지나는 트럭 Python

    2020. 6. 23. 15:47

    by. 위지원

    • 다리를 지나는 트럭

    문제 설명

    트럭 여러 대가 강을 가로지르는 일 차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 트럭은 1초에 1만큼 움직이며, 다리 길이는 bridge_length이고 다리는 무게 weight까지 견딥니다.
    ※ 트럭이 다리에 완전히 오르지 않은 경우, 이 트럭의 무게는 고려하지 않습니다.

    예를 들어, 길이가 2이고 10kg 무게를 견디는 다리가 있습니다. 무게가 [7, 4, 5, 6]kg인 트럭이 순서대로 최단 시간 안에 다리를 건너려면 다음과 같이 건너야 합니다.

    경과 시간다리를 지난 트럭다리를 건너는 트럭대기 트럭

    0 [] [] [7,4,5,6]
    1~2 [] [7] [4,5,6]
    3 [7] [4] [5,6]
    4 [7] [4,5] [6]
    5 [7,4] [5] [6]
    6~7 [7,4,5] [6] []
    8 [7,4,5,6] [] []

    따라서, 모든 트럭이 다리를 지나려면 최소 8초가 걸립니다.

    solution 함수의 매개변수로 다리 길이 bridge_length, 다리가 견딜 수 있는 무게 weight, 트럭별 무게 truck_weights가 주어집니다. 이때 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 return 하도록 solution 함수를 완성하세요.

    제한 조건

    • bridge_length는 1 이상 10,000 이하입니다.
    • weight는 1 이상 10,000 이하입니다.
    • truck_weights의 길이는 1 이상 10,000 이하입니다.
    • 모든 트럭의 무게는 1 이상 weight 이하입니다.

     

    트럭마다 (무게, 시간)을 가지고 있게해서 다리를 건너게 한 다음에 다리를 건너는 동안 시간 값을 +=1 하고 시간 값이 다리 길이를 넘으면 트럭을 내려오게 했다.

     

    def timeFilter(time, bride_length):
        return time < bride_length + 1
    
    
    def solution(bridge_length, weight, truck_weights):
        #어차피 트럭이 한대면 추가로 코드가 돌아갈 필요 없도록
        if len(truck_weights) == 1:
            return bridge_length + 1
        
        #변수 설정
        trucks = []
        bridge = []
        time = 0
        
        #(트럭무게, 시간)으로 데이터 변형
        for truck in truck_weights:
            trucks.append([truck, 0])
        
        #초기에 트럭 한대 미리 올려놓기
        bridge.append(trucks.pop(0))
        bridge[0][1] += 1
        time += 1
        
        #트럭 올릴까 말까 올릴까 말까 올릴까 말까 검사해서 올리기
        while trucks:
            totalWeight = sum([truck[0] for truck in bridge])
            if trucks[0][0] + totalWeight <= weight:
                bridge.append(trucks.pop(0))
            
            #올라가있는 트럭 객체의 시간 값 올려주기
            for truck in bridge:
                truck[1] += 1
            
            #내려가야할 트럭 검사
            bridge = list(filter(lambda truck:truck[1]<bridge_length,bridge))
            time += 1
    
        #트럭이 다 올라간 경우 마지막으로 올라간 트럭은 지나가야하니까 다리길이만큼 더해줌
        time += bridge_length 
    
        return time

     

     

     

    '2020년 > 코테' 카테고리의 다른 글

    [코테 연습] 기능 개발 Python  (0) 2020.06.23
    [코테 연습] 탑 Python  (0) 2020.06.23
    [코테] 여행 경로 Python  (1) 2020.06.19
    [코테 연습] 단어 변환 Python  (0) 2020.06.18
    [코테 연습] 네트워크 Python  (0) 2020.06.16