프로그래머스 LEVEL 2(다리를 지나는 트럭)

image

  • 사용 언어 : javascript

  • 해결 날짜 : 2022-10-12

  • 해결 방법 :
    • 다리를 지나는 과정을 표현할 bridge 0으로 초기화
    • while문 반복 시(반복 한 번당 1초를 의미) bridge의 최상단 pop()
    • 다리가 최대 견딜 수 있는 무게가 현재 지날 트럭의 무게와 현재 다리의 무게의 합보다 크거나 같으면 현재 지날 트럭을 bridge에 unshift() 및 무게 update
    • 그렇지 않으면 다리에 더 오를 수 없다는 뜻이므로 bridge에 0 unshift()
  • 회고 :
    • while문 속 조건을 truck_weights.length로 주고 truck_weight.length 조건을 가진 if문을 삭제한 뒤 answer과 bridge_length(마지막에 건너는 차량의 소요 시간)의 합을 return해도 동일한 결과
    • console문으로 현재 다리의 지나는 트럭을 시각화 하기 위해 아래 코드와 같이 작성함
    • image
  • 코드

    function solution(bridge_length, weight, truck_weights) {
        let answer = 0;
        const bridge = Array.from({length: bridge_length}, () => 0);
        let bridge_weight = 0;
        truck_weights.reverse();
            
        while (bridge.length) {
            bridge_weight -= bridge.pop();
                
            if (truck_weights.length) {
                const current = truck_weights.at(-1);
                if (weight >= current + bridge_weight) {
                    bridge.unshift(truck_weights.pop());
                    bridge_weight += current;
                } else bridge.unshift(0);
            }
                
            answer++;
        }
        return answer;
    }
    
  • 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges