본문 바로가기

Python/프로그래머스

[프로그래머스] [Python] 다리를 지나는 트럭

문제 풀이

 

def solution(bridge_length, weight, truck_weights):
    # answer += bridge_length를 할 것이기 때문에 그냥 처음부터 다리 길이를 answer에 넣었다.
    answer = bridge_length
    # 현재 다리 위에 있는 트럭의 무게
    current_weight = 0

    # 현재 다리 위에 있는 트럭의 배열
    truck_on_bridge = list()

    # 각 트럭을 반복문으로 돌면서
    for i in range(len(truck_weights)):
        truck = truck_weights[i]

        while True:
            # 다리에 트럭이 한 대도 없으면
            if not truck_on_bridge:
                # 트럭이 다리위에 올라가고 해당 트럭의 무게를 추가. 시간 증가.
                truck_on_bridge.append(truck)
                current_weight += truck
                answer += 1
                break

            # 다리 길이 만큼 트럭이 꽉 차있으면
            elif len(truck_on_bridge) == bridge_length:
                # 트럭이 나가고 그 무게도 뺀다.
                current_weight -= truck_on_bridge.pop(0)

            # 다리에 트럭이 있는데
            else:
                # 트럭이 한 대 더 들어가면 무게가 넘어갈 경우
                if truck + current_weight > weight:
                    # 0을 추가함으로써 트럭이 한칸 앞으로 움직였다는 것(시간의 증가)을 표현. 무게는 중가하지 않는다.
                    truck_on_bridge.append(0)
                    answer += 1

                # 한 대가 더 들어가도 무게가 넘지 않는다면
                else:
                    # 트럭이 한 대 더 진입한다. 무게와 시간 또한 증가.
                    truck_on_bridge.append(truck)
                    current_weight += truck
                    answer += 1
                    break

 

 

 자칫 헷갈리거나 어려워보일 수 있는 문제였으나 문제를 잘게 나누어 한 부분씩 처리하면 생각보다 해결의 실마리가 눈에 빨리 띌 수 있다는 것을 알려준 문제였습니다. 

 

 

문제 링크

 

 

programmers.co.kr/learn/courses/30/lessons/42583?language=python3

 

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

트럭 여러 대가 강을 가로지르는 일 차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 트럭은 1초에 1만큼 움직이며, 다리 길이

programmers.co.kr