https://school.programmers.co.kr/learn/courses/30/lessons/42583
# bridge_length : 다리를 건널 수 있는 최대 트럭 수
#[_, _, _]
# weight : 몇키로 버틸 수 있는지
def solution(bridge_length, weight, truck_weights):
#answer : 경과시간
#bridge : 다리 길이와 같은 길이의 값이 0으로 된 리스트 생성
answer = 0
bridge = [0 for _ in range(bridge_length)]
truck_sum = 0
while bridge != []:
# 트럭이 다리를 지나는 과정을 answer+=1을 통해 경과시간 계산
answer += 1
passed = bridge.pop(0)
truck_sum -= passed
if truck_weights != []:
# 다리 위에 있느 트럭의 총 무게와 다음 대기열에 있는 트럭 무게 합이 weight을 넘지 않는 경우
if truck_sum + truck_weights[0] <= weight:
t = truck_weights.pop(0)
bridge.append(t) # 해당 트럭을 다리 위에 추가
truck_sum += t
# 무게를 넘는경우, 0을 추가하여 다리의 길이를 유지
else:
bridge.append(0)
return answer
# bridge : [0, 0, 0]
# bridge : [0, 0, 7] // wait_truck : [4, 5, 6] # t = 1
# # bridge : [0, 0, 7] -> [0, 7, 0] # t = 2
# # bridge : [0, 7, 0] -> [7, 0, 0] # t = 3
# bridge : [7, 0 ,0] -> [0, 0] -> [0, 0, 4], wait_truck : [5, 6] # t = 4
# bridge : [0, 0, 4] -> [0, 4, 5] wait_truck : [6] # t = 5
# # bridge : [0, 4, 5] -> [4, 5, 0] # t = 6
# # bridge : [4, 5, 0] -> [5, 0, 0] # t = 7
# # bridge : [5, 0, 0] -> [0, 0] -> [0, 0, 6], wait_truck : [] # t = 8
# # bridge : [0, 0, 6] -> [0, 6] # t = 9
# # bridge : [0, 6] -> [6] # t = 10
# # bridge : [6] -> [] # t = 11