[스택/큐] 다리를 지나는 트럭

awmaker·2021년 7월 25일

Algorithm

목록 보기
1/9
post-thumbnail

[스택/큐] 다리를 지나는 트럭

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입니다.

profile
From design to DevOps with frontend and backend.

0개의 댓글