다리를 지나는 트럭-프로그래머스(python)

JunSung Choi·2020년 2월 20일
1

알고리즘

목록 보기
1/20

출처: 프로그래머스 코딩 테스트 연습 - 다리를 지나는 트럭, https://programmers.co.kr/learn/courses/30/lessons/42583

문제설명

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

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


따라서, 모든 트럭이 다리를 지나려면 최소 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 이하입니다.

풀이

def solution(bridge_length, weight, truck_weights):
    time = 0
    q = [0] * bridge_length
    
    while q:
        time += 1
        q.pop(0)
        if truck_weights:
            if sum(q) + truck_weights[0] <= weight:
                q.append(truck_weights.pop(0))
            else:
                q.append(0)
    
    return time

처음에는 리스트를 하나 따로 만들어 각 트럭이 다리를 빠져나올 때 그 index를 이용해 따로 만든 리스트의 item들을 갱신해서 다 더하려고 했었다. 하지만, 이렇게 하면 다리에 2개 이상의 트럭이 들어와 있을때 2개 이상의 리스트의 item들을 조작하기가 어려웠다.
그래서 위처럼 다리 length가 2라면, [0,0] 와같은 0이 들어간 리스트 q를 만들고
[0, 트럭] -> [트럭,0]-> [0,0] 이런식으로 트럭이 들어오고 나가게 구현 함으로써 해결할 수 있었다.

profile
Frontend Developer

2개의 댓글

comment-user-thumbnail
2020년 6월 26일

이 코드는 현재 제출하면 타임아웃이 되어버렸습니다 ㅠ

답글 달기
comment-user-thumbnail
2022년 8월 3일

코드 간결하고 좋네요 감사합니다! 혹시 시간초과 뜨시는 분들은 sum(q)를 반복문 밖에서 미리 계산하고 q에 들어오는 값, 나가는 값만 더하고 빼주면 시간초과 안뜹니다!

답글 달기

관련 채용 정보