데이터 엔지니어

프로그래머스 - [LEVEL 2] 다리를 지나는 트럭 본문

프로그래밍(Programming)/알고리즘(Algorithm)

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

kingsmo 2020. 8. 20. 23:53

문제링크: programmers.co.kr/learn/courses/30/lessons/42583

 

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

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

programmers.co.kr


문제 간략한 설명

- 모든 트럭이 다리를 지나는 최소 시간을 구하는 문제

- 다리의 길이는 bridge_length로 트럭은 1초에 1칸씩 가고 트럭은 순차적으로 들어옴

- 다리는 무게제한(weight) 가지고 있음

 


풀이 방법

Queue를 사용한 문제

- queue로 bridge를 선언한다.

- bridge에 트럭이 지나갈 수 있으면 트럭무게를 없으면 0을 추가한다.

- 남은 트럭이 없으면 bridge에 트럭이 없도록 남은 시간을 계산해준다.

def solution(bridge_length, weight, truck_weights):
    time = 0
    bridge = [0] * bridge_length # 다리 큐
    current_weight = 0 # 다리 현재 무게
    
    # 트럭들 전부 보내기
    while truck_weights:
        time += 1
        out = queue.pop(0)
        current_weight -= out
        
        # 트럭이 들어올 때 다리 최대 무게 점검
        # 트럭이 다리를 지나갈 수 없으면 0으로 bridge에 올린다.
        if current_weight + truck_weights[0] > weight:
            bridge.append(0)
        # 트럭이 다리를 지나갈 수 있으면 truck 뽑아서 queue에 올린다.
        # 현재 무게도 추가
        else:
            truck = truck_weights.pop(0)
            bridge.append(truck)
            current_weight += truck
    
    # 남은 트럭이 없을 경우
    # 현재 무게가 0이 될때 까지 bridge에 남은 truck들을 제거해준다.
    while curr_weight > 0:
        time += 1
        out = bridge.pop(0)
        current_weight -= bridge_out

    return time

 

코드: https://github.com/smothly/Algorithm_Solving/blob/master/programmers-%EB%8B%A4%EB%A6%AC%EB%A5%BC%20%EC%A7%80%EB%82%98%EB%8A%94%20%ED%8A%B8%EB%9F%AD.py

Comments