개발 공부/알고리즘 문제 풀이

[프로그래머스] 다리를 지나는 트럭

종범2 2021. 4. 7. 13:55

문제

프로그래머스 다리를 지나는 트럭

programmers.co.kr/learn/courses/30/lessons/42583

언어

바스크립트(JavaScript)

 

접근 방법

  1. 다리위 트럭을 이동시킨다.
  2. 다리를 건넌 트럭이 있으면 다리 위에서 제거한다.
  3. 다음 트럭이 다리 위에 올라갈 수 있다면 다리 위에 올린다.
  4. 모든 트럭이 다리를 건넜는지 확인하고, 아니라면 반복한다.

코드

function solution(bridge_length, weight, truck_weights) {
    let cnt = 0;
    let bridgeStateList = [];
    while(true){
        cnt ++;
        // 모든 트럭 이동
        bridgeStateList.forEach((bridgeState=>{
            bridgeState.pos += 1;
        }))
        // 다리 건넌 트럭있으면 다리에서 제거
        bridgeStateList = bridgeStateList.filter(bridgeState=> bridgeState.pos !== (bridge_length+1));
        // 다음 트럭이 다리 위에 올라 갈 수 있는지 확인하고 
        // 가능하다면 트럭 다리 건너기 
        if (getIsWeightSafe(truck_weights[0], weight, bridgeStateList)){
            bridgeStateList.push({
                pos: 1,
                weight: truck_weights.shift()
            })
        } 
        // 모든 트럭이 다리 건넜는지 확인
        if (bridgeStateList.length === 0){
            break;
        }
    }
    return cnt;
}

const getIsBridgeEntEmpty = (bridgeStateList) => {
    let flag = true;
    bridgeStateList.forEach(bridgeState=>{
        if(bridgeState.pos === 1){
            flag = false;
        }
    })
    return flag;
}

const getIsWeightSafe = (truckWeight, safeWeight, bridgeStateList) => {
    let totalWeight = 0
    totalWeight += truckWeight;
    bridgeStateList.forEach(bridgeState=>{
        totalWeight += bridgeState.weight;
    })
    return safeWeight >= totalWeight;
}

복기

  1. 문제가 어렵지 않은데 오래 걸렸다.
  2. 어떻게 풀지 미리 적어놓고 풀었는데, 이 때 잘못 생각했다. 코드 짜기전에 더 많이 고민해봐야한다.