from collections import deque
def solution(bridge_length, weight, truck_weights):
answer = 0
ing = deque() #다리 위의 트럭
after = [] #다리를 건넌 트럭
truck_weights = deque(truck_weights)
count = 0
while True:
#다리 길이만큼 트럭이 다리 위에 머물렀을 때(즉 다 지나갔을 때)
if count == bridge_length:
#다리를 다 건넘
after.append(ing.popleft())
#카운트 초기화
count = 0
#대기 트럭이 존재할 때
if truck_weights:
#다리 위에 올라갈 조건을 충족할 때
if truck_weights[0] + sum(ing) <= weight and len(ing) < bridge_length:
#다리 위에 트럭 올리고, 대기 트럭 삭제
ing.append(truck_weights.popleft())
#시간 증가하고, 카운트도 증가
answer += 1
count += 1
#다리 위에 못 올라갈 때
else:
answer += 1
count += 1
#대기트럭도 다리 위의 트럭도 없을 때
elif not ing:
answer += 1
break
#대기트럭은 없지만 다리 위의 트럭은 있을 때
else:
answer += 1
count += 1
return answer
def solution(bridge_length, weight, truck_weights):
answer = 0
bridge = [0] * bridge_length #다리 길이 정의
while bridge:
bridge.pop(0) #다리 위에서 한 칸씩 이동
answer += 1 #시간 증가
if truck_weights: #대기 차가 있을 때
#다리 위에 올라갈 수 있는 무게일 때
if truck_weights[0] + sum(bridge) <= weight:
#다리 위에 차 올라감
bridge.append(truck_weights.pop(0))
else:
#다리 위에 아무것도 안 올라감(= 0)
bridge.append(0)
return answer
def solution(bridge_length, weight, truck_weights):
answer = 0
bridge = [0] * bridge_length
total_weight = 0
while bridge:
total_weight -= bridge.pop(0)
answer += 1
if truck_weights:
if total_weight + truck_weights[0] <= weight:
total_weight += truck_weights[0]
bridge.append(truck_weights.pop(0))
else:
bridge.append(0)
return answer
: total_weight
가 핵심!!
매번 다리 위에서 한칸 전진하고, 전진한 만큼 총 무게에서 빼준다.
그리고 대기 차에서 다리 위에 차를 추가할 때, 총 무게를 재조정!