const solution = (bridge_length, weight, truck_weights) => {
const bridge = new Array(bridge_length) // 다리를 건너고 있는 트럭
const trucks = [...truck_weights] // 트럭 리스트 복사
const completed = [] // 다리를 건넌 트럭
let count = 0 // 초 카운트
// 초기 매개변수로 받은 트럭 리스트와 다리를 건넌 트럭의 리스트 요소 갯수가 같을 때 까지 반복
while(truck_weights.length !== completed.length) {
count++ // 1초 증가
const truck = bridge.pop() // 다리 맨 뒤 요소를 가져오기
truck && completed.push(truck) // 해당 요소에 트럭이 있으면 완료 리스트에 추가
const sum = bridge.reduce((prev, curr) => prev + curr, 0) // 다리에 있는 모든 트럭의 무게를 합산
if (trucks[0] && sum + trucks[0] <= weight) bridge.unshift(trucks.shift()) // 다리의 모든 트럭 + 대기 트럭의 무게가 한계중량보다 적으면 다리에 맨 앞에 트럭 추가
else bridge.unshift(null) // 아니면 null을 다리에 맨 앞에 추가
}
return count // 초 카운트 반환
}
다리를 보다 직관적으로 알 수 있도록 작성한 0번째 인덱스에서 삽입하고 마지막 인덱스에서 추출하는 역방향 Queue입니다.