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

ARA JO·2021년 3월 19일
0

코딩테스트

목록 보기
2/2

stack이나 queue 문제로 분류되어 있는 문제들은, stack/queue를 생각해내는 것보다 로직을 차근차근 풀어내는게 어려운것 같다.😢

결국 로직이 꼬여서 제한시간(30분)내로 푸는 것에는 실패했다.
다른 사람의 풀이를 참고해서 완성했다.

def solution(bridge_length, weight, truck_weights):
    q = [0]*bridge_length
    sec = 0
    total = 0  # total weight : bridge 위에 있는 트럭들의 총 무게
    truck = 0

    while q:
        sec += 1
        truck = q.pop(0)
        total -= truck

        if truck_weights:
            if total+truck_weights[0] <= weight:
                truck = truck_weights.pop(0)
                q.append(truck)
                total += truck

            else:
                q.append(0)
    return sec

한가지 개선한 점은 sum하지 않고 변수에 +/- 계산해서 담도록 했다. 매번 list를 순회하여 sum값을 구하지 않아도 되기 때문에 속도를 개선할수 있다. list가 길어지면 큰 차이가 난다. (n^2 -> n)

참고 : https://docs.python.org/3/library/functions.html#sum
Sums start and the items of an iterable from left to right and returns the total.

아래는 실제 속도 차이다.

sum(q) 사용total 변수에 저장
테스트 1 〉 통과 (12.73ms, 10.3MB)
테스트 2 〉 통과 (1522.65ms, 10.3MB)
테스트 3 〉 통과 (0.02ms, 10.2MB)
테스트 4 〉 통과 (334.66ms, 10.3MB)
테스트 5 〉 통과 (9693.98ms, 10.3MB)
테스트 6 〉 통과 (1664.87ms, 10.2MB)
테스트 7 〉 통과 (7.19ms, 10.3MB)
테스트 8 〉 통과 (0.34ms, 10.1MB)
테스트 9 〉 통과 (5.98ms, 10.3MB)
테스트 10 〉 통과 (0.43ms, 10.3MB)
테스트 11 〉 통과 (0.01ms, 10.1MB)
테스트 12 〉 통과 (0.50ms, 10.2MB)
테스트 13 〉 통과 (3.93ms, 10.2MB)
테스트 14 〉 통과 (0.02ms, 10.2MB)
테스트 1 〉 통과 (1.05ms, 10.3MB)
테스트 2 〉 통과 (48.05ms, 10.3MB)
테스트 3 〉 통과 (0.02ms, 10.2MB)
테스트 4 〉 통과 (10.14ms, 10.3MB)
테스트 5 〉 통과 (292.72ms, 10.2MB)
테스트 6 〉 통과 (41.65ms, 10.2MB)
테스트 7 〉 통과 (0.75ms, 10.3MB)
테스트 8 〉 통과 (0.13ms, 10.2MB)
테스트 9 〉 통과 (2.95ms, 10.3MB)
테스트 10 〉 통과 (0.18ms, 10.2MB)
테스트 11 〉 통과 (0.01ms, 10.1MB)
테스트 12 〉 통과 (0.24ms, 10.2MB)
테스트 13 〉 통과 (1.04ms, 10.1MB)
테스트 14 〉 통과 (0.02ms, 10.2MB)
profile
Sin prisa pero sin pausa (서두르지 말되, 멈추지도 말라)

0개의 댓글