로직
다리를 건너는 트럭(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 |