[Programmers] 다리를 지나는 트럭

퍼롱's·2021년 9월 16일
0

🍒Programmers🍒

목록 보기
8/11
post-thumbnail

출처: 프로그래머스 코딩테스트 연습
https://programmers.co.kr/learn/courses/30/lessons/42583

📝 풀이(python3)

def solution(bridge_length, weight, truck_weights):
    time = 0 

    # 트럭이 다리를 건너는 상황을 bridge로 표현하기 위해 bridge_length만큼 배열을 만들어줌
    bridge = [0] * bridge_length

    # bridge에 트럭이 존재하는 동안 while루프를 돌게 함
    while bridge:

        # 1초일 때 첫 번째 트럭이 bridge에 올라옴
        time += 1

        # 1초마다 트럭은 이동하므로 맨 앞의 트럭은 1초가 지나면 다리를 지난 트럭이므로 제거
        bridge.pop(0)

        # truck_weigths에 들어있는 트럭들을 bridge로 올리기
        if len(truck_weights) != 0:

            # bridge위에 올라와있는 트럭의 총 무게와 새로 bridge에 올라올 트럭의 무게의 합을 다리가 견딜 수 있는 무게 weight와 비교
            # weight값보다 작거나 같으면 bridge에 새로운 트럭 추가           
            if sum(bridge) + truck_weights[0] <= weight:
                bridge.append(truck_weights.pop(0))

            # weight값보다 크면 bridge에 올라올 수 없으므로 0 추가
            else:
                bridge.append(0)
 
    return time

전에 알고리즘도 잘 모르던 때에 겁없이 풀어보려고 끙끙댔었던 문제..

지금은 스택과 큐에 대한 기본 개념이 잡혀서 좀 더 수월한 풀이가 가능하지만 아직도 deque 등 더 익혀야 할 것이 많다

트럭이 지나가는 다리를 bridge라는 배열로 만들어서 time을 계산해주어야 했던 문제고,

만약 다리 위 트럭 무게의 총합과 새로 다리에 들어올 트럭의 무게의 합이 weight보다 크면 다리 위에 트럭이 올라올 수 없으므로 맨 앞 트럭이 다리를 다 지나갈 때까지 기다려야 한다

이를 이용해서 truck_weight의 트럭을 하나씩 bridge에 올려주어야 하고 만약에 weight를 넘게 되어 트럭을 못 올리게 되어도 bridge의 길이는 유지해야 하므로 bridge에 0을 추가해준다

truck_weight 의 트럭이 다리 위에 다 올라왔다면 bridge에는 더 추가해줄 값은 없고 bridge 위 트럭이 다 지나갈 때까지 time을 증가시켜 주어야 하며 bridge 위 트럭이 다 빠져나가면 그제서야 while 루프가 멈추는 코드이다

profile
유지경성

0개의 댓글