PR - 다리를 건너는 트럭

Goody·2021년 3월 31일
0

알고리즘

목록 보기
80/122
post-custom-banner

문제 및 예시

지난 풀이 참고


풀이 및 회고

  • 지난 풀이에선 트럭을 트럭이 가진 무게로만 정의해서 다리 위에서의 트럭의 이동 진행사항을 반영하지 못한 게 실수였다.
  • 이번에는 각 트럭을 객체로 저장해서 weight값과 position 값을 갖게 했다.
  • 다리를 지나는 트럭들의 시간별 위치이동 연산과, 다리 위 선두를 달리는 트럭이 다리에서 빠져나오는 연산을 하나의 forEach 문 안에서 하려다가 시간을 많이 잡아먹었다.
  • 배열을 순회하면서 배열을 수정하는 것은 웬만하면 하지말자.. 인접한 원소의 참조를 건너뛰어 버리는 실수를 자주 하는 것 같다.

코드

function solution(bridge_length, weight, truck_weights) {
    const trucks = truck_weights.map((truck) => {
        return {weight: truck, pos : 1};
    })
    let currentWeight = 0;
    let time = 0;
    let passing = [];

    while(trucks.length > 0 || passing.length > 0) {
        time++

        passing.forEach((truck) => {
            truck.pos++;   
        });
        
        if(passing.length > 0) {
            if(passing[0].pos > bridge_length) {
                currentWeight -= passing[0].weight;
                passing.shift();
            }
        }


        if(trucks.length > 0) {
            if(currentWeight + trucks[0].weight <= weight) {
                currentWeight += trucks[0].weight;
                passing.push(trucks.shift());
            }
        }

    }
    return time;
}
post-custom-banner

0개의 댓글