본문 바로가기

알고리즘

[programmers] 다리를 지나는 트럭


로직

다리를 건너는 트럭(bridge), 대기트럭(truck_weights)를 while문을 돌면서 초가 변할때 마다 변경해준다.

이때, bridge = [0] * bridge_length를 해서 이동하는 것을 하나씩 보여준다.

bridge의 합이랑 truck_weights의 첫번째 값(=bridge에 들어갈 값)을 더했을 때, weight보다 작거나 같으면 bridge에 넣어준다. 이때 bridge의 칸을 한칸씩 옮긴다(pop(0)을 통해)

 

bridge변화 과정

time  bridge  truck_weights
0초   [0, 0]   [7, 4, 5, 6]
1초   [0, 7]   [4, 5, 6]
2초   [7, 0]   [4, 5, 6]
3초   [0, 4]   [5, 6]
4초   [4, 5]   [6]
5초   [5, 0]   [6]
6초   [0, 6]   []
7초   [6, 0]   []
8초   [0, 0]   []

중요한것은 내가 while문을 돌릴때 while truck_weights: 를 할 것이므로 최종 time에서 bridge_length를 더해줘야 마지막 값이 최종적으로 다리를 완전히 지날 수 있다.

 

코드

def solution(bridge_length, weight, truck_weights):
    bridge = [0] * bridge_length

    time = 0
    while truck_weights:
        time += 1

        bridge.pop(0)

        if (sum(bridge) + truck_weights[0]) <= weight:
            x = truck_weights.pop(0)
            bridge.append(x)
        else:
            bridge.append(0)

    return time + bridge_length

 

주의할 점

1. 0을 언제 빼주고 언제 더할지 알아야한다. 

def solution(bridge_length, weight, truck_weights):
    bridge = [0] * bridge_length

    time = 0
    while truck_weights:
        time += 1

        

        if (sum(bridge) + truck_weights[0]) <= weight:
            x = truck_weights.pop(0)
            bridge.append(x)
        else:
	        bridge.pop(0)
            bridge.append(0)

    return time + bridge_length

처음에 작성한 코드인데 이렇게 되면 원래 3초일때 [0, 4]여야하는데 [0, 0]이 나온다. 즉, 7인 트럭이 완전히 다리를 다 지나면 바로 4를 가진 트럭이 올라와야하는 것이다.

'알고리즘' 카테고리의 다른 글

[programmers] 단속카메라  (0) 2020.09.08
[programmers] 후보키  (0) 2020.09.04
[programmers] 네트워크  (0) 2020.09.04
[programmers] 파일명 정렬  (0) 2020.09.02
[programmers] 오픈채팅방  (0) 2020.09.01