알고리즘

[프로그래머스 lv 2] 다리를 지나는 트럭.py

파뱁 2022. 2. 11. 21:42
728x90

<문제 설명>

https://programmers.co.kr/learn/courses/30/lessons/42583

 

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

트럭 여러 대가 강을 가로지르는 일차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 다리에는 트럭이 최대 bridge_length대 올라갈

programmers.co.kr

다리의 길이, 다리가 견딜수 있는 하중, 트럭의 개별 무게 가 주어진다.

다리는 1초에 한칸만 지날 수 있고, 최대 하중 초과의 무게는 올라가면 안된다.

이때 모든 트럭이 다리에서 나오려면 몇 초가 걸리는지 반환하면 된다.

 

입출력의 예는 다음과 같다.

bridge_length weight truck_weights return
2 10 [7,4,5,6] 8
100 100 [10] 101
100 100 [10,10,10,10,10,10,10,10,10,10] 110

 

<문제 풀이 아이디어>

먼저 한계 수용만큼 다리에 자리를 만들어주고, 0으로 채워준다.

이후 다리의 길이 동안, 다리의 자리를 하나 빼고 넣을 트럭이 남아있다면 현재 하중에 새로 들어올 트럭의 무게를 더한 값이 한계 하중 보다 작으면 0을 뺀 자리에 그 트럭을 넣고, 초과한다면 다시 0을 넣는다. 넣을 트럭이 남아있지 않다면 0을 빼주는 작업만 반복하면서 시간을 보내고, 그렇게 다리가 다 빈다면 마지막에 카운트 한 초를 반환해준다.

 

<문제 풀이 코드>

def solution(bridge_length, weight, truck_weights):
    answer = 0
    bridge = [0] * bridge_length ## 한계수용 만큼 다리에 자리를 만들어줌
    while len(bridge):
        answer += 1
        bridge.pop(0) #넣을거 가정하고 자리 하나 뺌
        if truck_weights:
            if(weight - sum(bridge) >= truck_weights[0]): #무게 조건 통과하면
                bridge.append(truck_weights.pop(0)) #트럭 하나 빼서 다리에 넣음
            else:
                bridge.append(0)#트럭 넣지 않았으므로 다시 0 넣음
    return answer

채점 결과

728x90
반응형