다리를 지나는 트럭

Happhee·2022년 1월 29일
0

[ Lv2 ] programmers

목록 보기
6/32
post-thumbnail

📝 다리를 지나는 트럭

🖥 나의 JS 코드

첫번째 시도

function solution(bridge_length, weight, truck_weights) {
    var time = 0;
    //다리를 건너고 있는 트럭과 그 트럭이 다리를 건너고 있는 시간을 담을 배열 선언
    let on_truck = [], time_truck = [];
  
  // 다리를 건너고 있는 트럭이 없으면서 대기 트럭이 없을때, 반복문 종료
    while(on_truck.length != 0 || truck_weights.length != 0){
      // 다리를 건너는 트럭이 있으면, 1초씩 더해준다
        if(time_truck.length != 0){
            time_truck = time_truck.map((time) => time +=1);
        }
     
      //만약 맨 앞에 있는 트럭이 다리를 다 건너면,
      // 다리에서 해당 트럭을 제거해준다
        if(time_truck[0] === bridge_length){
            on_truck.shift();
            time_truck.shift();
        }
      
      // 현재 다리를 건너고 있는 트럭의 무게를 가져오고
        let sum = on_truck.reduce((acc, cur)=>{
            return acc + cur
        },0)
        
        // 그 무게와 대기중인 트럭의 무게를 더한값이 다리가 견딜 수 있는 무게와 같거나 작으면서,
        // 대기 트럭이 유효할 시 ( shift 에러 방지를 위한 검사 )
        // 이에 대한 트럭을 다리에 올려주고, 시간을 0으로 설정한다
        if(sum + truck_weights[0] <= weight && truck_weights.length != 0){
            on_truck.push(truck_weights.shift());
            time_truck.push(0);
        }
      
      // 시간은 1초씩 더해간다
        time++;
        
    }
  
  // 반복문 탈출하면서 시간을 반환
    return time;
}

두번째 시도

function solution(bridge_length, weight, truck_weights) {
    let onBridge = [];
    let onBridgeTime = [];
    let time = 1;
  // 맨 앞의 트럭 다리에 올려주기
    let sum = truck_weights[0]
    onBridge.push(truck_weights.shift())
    onBridgeTime.push(1);
    
  // 다리 위에 트럭이 없을때까지 실행
    while(onBridge.length != 0){
      
         if(onBridgeTime[0] === bridge_length){
            sum -= onBridge[0];
            onBridge.shift(); 
            onBridgeTime.shift();
        }
      // 다리위의 트럭이 지난 거리 1씩 증가
      	onBridgeTime = onBridgeTime.map((data)=> data+1)
        time++;
      // 다리 위의 트럭 무게들 + 다리에 들어오기직전의 트럭의 무게가 최대하중과 같거나 작고
      // 다리에 올릴 수 있는 최대 트럭의 수보다 작을때 
      // 추가적으로 트럭을 올릴 수 있음
        if(sum + truck_weights[0] <= weight
               && onBridge.length < bridge_length){  
                sum += truck_weights[0];
                onBridge.push(truck_weights.shift())
                onBridgeTime.push(1);
            }
    }
    // 최종 걸린 시간 반환
    return time;
}

profile
즐기면서 정확하게 나아가는 웹프론트엔드 개발자 https://happhee-dev.tistory.com/ 로 이전하였습니다

0개의 댓글