2/프로그래머스

프로그래머스 연습 문제 - 다리를 지나는 트럭

하례은 2020. 9. 27. 19:14

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

 

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

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

programmers.co.kr

스택/큐 문제

 

~처음 푼 방법

def solution(bridge_length, weight, truck_weights):
    finish = []
    answer = 0
    while truck_weights:
        truck = truck_weights.pop(0)
        finish.append(truck)
        answer += bridge_length
        for i in range(len(truck_weights)):
            truck += truck_weights[0]
            if len(truck_weights) >= 1:
                if weight >= truck:
                    finish.append(truck_weights.pop(0))
                    answer += 1
            
    return answer+1

채점 결과

정확성: 28.6

합계: 28.6 / 100.0

 

맞겠지 하고 봤는데 생각해보니 같이 지나가면서 하나가 빠지면 또 비어있는 무게만큼 들어와 기존의 차량과 같이 이동할 수 있기 때문에 완전 틀린답이었다... 문제 이해력은 언제 올라가려나 ㄱ-...

 

 

~다른사람 풀이

def solution(bridge_length, weight, truck_weights):
    answer = 0
    on_bridge = []
    on_time = []
    while (truck_weights or on_bridge):
        answer += 1
        if(on_time):
            if(on_time[0] + bridge_length == answer):
                on_bridge.pop(0)
                on_time.pop(0)
                
        if(truck_weights):
            if(sum(on_bridge) + truck_weights[0] <= weight):
                on_bridge.append(truck_weights.pop(0))
                on_time.append(answer)
                
                
    return answer

다른분들 풀이 참고해서 그냥 코드리뷰식으로 풀었다ㄱ-...

on_time은 트럭이 들어간 시간을 담는 배열

on_bridge는 다리 위에 있는 트럭의 무게를 담는 배열

트럭이 들어올 수 있으면 append를 한다. 들어온 시간과 다리의 길이를 합하여 흐른 시간과 비교했을때 같으면 다리를 건너 pop해준다.