[프로그래머스] 알고리즘 Kit - 다리를 지나는 트럭

ss_kim·2024년 11월 12일

<코드>

function solution(bridge_length, weight, truck_weights) {
    var answer = 0;
    
    const on = []
    const wait = [...truck_weights]
    
    while(on.length || wait.length) {
        answer++
        
        if(answer == on[0]?.[0]) {
            on.shift()
        }
        
        if(on.reduce((a,c) => a + c[1], 0) + wait[0] <= weight) {
            on.push([answer + bridge_length, wait.shift()])
        } else {
            if(on[0]) answer = on[0][0] - 1
        }
    }
    
    return answer;
}



<풀이>

다리를 건너는 트럭, 대기하는 트럭을 배열로 정리. 이 때, 다리를 건너는 트럭은 [지나가는 시간, 무게]로 설정

예제의 표와 같이 다리를 건너는 트럭, 대기하는 트럭이 모두 0이 될때까지 while문 반복되고 answer가 1씩 증가

answer가 다리를 건너는 트럭의 지나가는 시간과 같아지면 shift로 제거

다리를 건너가는 트럭과 다음 올라갈 트럭의 무게가 weight 이하면 지나가는 트럭 배열에 추가
weight 이상이면 answer를 다리를 건너는 맨 앞 트럭의 시간으로 변경해서 반복문 실행




<처음 작성한 코드>

    while(on.length || wait.length) {
        answer++
        
        if(answer > bridge_length) {
            on.shift()
        }
        
        if(on.reduce((a,c) => a+c,0) + wait[0] <= weight) {
            on.push(wait.shift())
        } else {
            if(wait.length) on.push(0)
        }
    }

처음 작성한 코드에서는 다리를 건너가는 트럭과 다음 올라갈 트럭의 무게가 weight 이상일 때, 대기 중인 트럭 배열에 0을 추가해 줬는데, 이럴 경우에 다음 트럭이 못 올라가는 경우를 생략하지 않아 실행 횟수가 많아짐

profile
프론트엔드 개발자

0개의 댓글