ㅁㄴㅇㄻㄴㅇㄹ

[코딩테스트] 프로그래머스 다리를 지나는 트럭 with Python 본문

코딩테스트

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

hanbin8269 2021. 5. 9. 14:17

문제 풀이 코드

def solution(bridge_length, weight, truck_weights):
    # sum(다리를 건너는 트럭) + truck_weights[0] 가 weight이 안넘으면
    # 다리를 건너는 트럭.append(truck_weights[0])
    # 다리를 건너는 트럭[0][1] 을 시간이 지날때 마다 += 1 해줌
    # 다리를 건너는 트럭[0][1] 이 weight보다 크거나 같으면
    # 다리를 건너는 트럭[0] 을 다리를 지난 트럭으로 이동
    # 위 과정을 반복
    time = 0
    truck_weights = list(map(lambda x : [int(x),0],truck_weights))  #1
    current_bridge = []

    while True:
        time += 1
        current_bridge = list(map(lambda x : [x[0],x[1] + 1],current_bridge))  #2

        if len(current_bridge) > 0:
            if current_bridge[0][1] > bridge_length:  # 3
                del current_bridge[0]

        if len(truck_weights) > 0:
            if sum(map(lambda x : x[0] ,current_bridge)) + truck_weights[0][0] <= weight:  # 4
                truck = truck_weights.pop(0)
                current_bridge.append([truck[0],truck[1] + 1])

        if len(current_bridge) +  len(truck_weights) <= 0:
            break
    return time

#1

truck_weights 의 데이터 구조를 [무게, 현재 위치] 구조로 잡음
현재 위치 : 다리를 어느정도 건넜는가 (대기 상태이면 0)

#2

시간이 지날 때 마다 트럭이 다리를 1만큼 이동함 (다리 위에 올라가 있는 트럭만)

#3

트럭이 다리를 모두 건넜다면 제거해줌

#4

다리에 트럭을 더 올릴수 있다면 올림