[algorithm / programmers] 다리를 지나는 트럭

stella·2020년 6월 10일

algorithm

목록 보기
2/7

다리를 지나는 트럭

문제

다리를 지나는 트럭

풀이

function solution(bridge_length, weight, truck_weights) {
    let time = 0;
    let done = [];
    let ing = [];
    let all_trucks = truck_weights.length;

    
    while(done.length < all_trucks){
        
        if(ing.length && ing[0].position === bridge_length){
            const leave_truck = ing.shift();
            done.push(leave_truck);
        }
               
        const truck = truck_weights[0];
        const all_weights  = ing.reduce((acc, cur) => acc + cur.weight, 0) + truck;
        
        if(all_weights <= weight){ //하중 견딜만할 때
            ing.push({ weight : truck , position : 0}); // 새 트럭 진입
            truck_weights.shift(); // 대기열에서 빼기
        }
        
        //시간 지난거 체크해줘야지
        ing.forEach(e => e.position++);
                 
        time++;
    }
    
    return time;
}
  • 걸리는 시간(time), 다 건넌 차 리스트(done), 다리위에있는 차 (ing), 모든 차 갯수(all_trucks)
  • 다 건넌 차의 수가 모든 차 보다 적을 때만 반복을 한다. (while)
  • 다리위에 차가 하나라도 있고, 다리위 첫번째 차의 위치가 다리 끝일때 트럭을 뽑아서 다 건넌곳으로 옮겨준다
  • 대기열의 첫번째 트럭을 참조하고, 현재 다리위의 무게를 체크한후 트럭과 합쳤을때 하중이 넘지 않는지 본다.
  • 하중이 견딜만 하면, 새 트럭이 진입하고, 대기열에서 트럭을 빼준다.
  • 현재 다리위에 있는 차들의 위치를 1씩 옮겨준다. (1초당 1만큼 이동)
  • 차가 다리를 다 건너면 걸린 시간을 리턴한다.

comments

  • 리팩토링 한다면
    - 현재 다리위의 하중을 리듀스로 매번 계산하는 부분을 변경하고싶다.
    • 미리 빈배열로 다리를 만들어 놓고 나서 하는 방식으로도 해보고 싶음
profile
겔름뱅이

0개의 댓글