나의 풀이
- 트럭이 진입한 시간, 다리 위에서의 무게를 계산하는 과정에서 pop(0)가 많이 발생하므로 Queue를 활용했다.
- 트럭이 막 진입한 시간을 0초, 진입 후에 1초가 된다는 생각으로 answer 값을 활용했다.
from collections import deque
def solution(bridge_length, weight, truck_weights):
truck_weights = deque(truck_weights)
# 다리에 트럭이 진입한 시간
time_list = deque()
# 현재 다리 위 트럭 무게
weight_now = deque()
# 총 시간
answer = 0
# 모든 트럭 진입 후 종료
while truck_weights:
# 진입할 트럭
temp_weight = truck_weights[0]
# 무게 + 트럭 개수 만족
if (sum(weight_now) + temp_weight <= weight) and len(time_list) < bridge_length:
# 다리 위 무게
weight_now.append(truck_weights.popleft())
time_list.append(answer)
# 트럭 진입 : 시간 경과
answer += 1
# 통과 조건
if (answer - time_list[0]) == bridge_length:
weight_now.popleft()
time_list.popleft()
# 마지막 진입한 트럭이 나올 때까지의 시간
answer += (bridge_length)
return answer
다른 사람 풀이
- [ic]bridge_length[/ic] 만큼의 다리를 선언하고 조건을 확인해 차를 진입시킨다.
- 이 경우 truck_weights가 입력될 때까지 bridge의 길이는 bridge_length 만큼 유지하다가 점차 줄어들게 되고 이를 통해 answer를 구할 수 있다!
def solution(bridge_length, weight, truck_weights):
answer = 0
bridge = [0 for _ in range(bridge_length)]
while bridge:
answer += 1
bridge.pop(0)
if truck_weights:
if sum(bridge) + truck_weights[0] <= weight:
t = truck_weights.pop(0)
bridge.append(t)
else:
bridge.append(0)
return answer