다리를 지나는 트럭 (Programmers Lv.2)

더보기

 

...

solution 함수의 매개변수로 다리에 올라갈 수 있는 트럭 수 bridge_length, 다리가 견딜 수 있는 무게 weight, 트럭 별 무게 truck_weights가 주어집니다. 이때 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 return 하도록 solution 함수를 완성하세요.

https://school.programmers.co.kr/learn/courses/30/lessons/42583?language=cpp

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제를 보자마자 떠올렸다.

 

"QUEUE 를 사용해야겠구나!"

 

하지만 문제는 호락호락하지 않았다.

 

사실 자바스크립트로 큐를 어떻게 구현할 지 고민을 많이 했다...

C++은 그냥 라이브러리 불러오면 되는데...

 

처음 시도했던 문제풀이는 truck_weights 크기만큼 for문을 돌리고,
다리가 견딜 수 있는 무게나 다리에 올라갈 수 있는 트럭 수를 초과할 경우

 idx-- 로 모든 트럭이 다리에 올라갈 수 있게끔 유도했다.

 

결과는 역시... 😭😭😭

 

그래서 자바스크립트를 슬쩍 C++로 바꾸고 문제를 풀었다.


물론 이도 쉽지 않았지만 다행히 통과... 👍

 

해당 풀이를 슬쩍 자바스크립트로 바꿔봤다.

 

JS 풀이)

function solution(bridge_length, weight, truck_weights) {
    let answer = bridge_length;
    
    let bridge = [];
    let sum=0, idx=0;
    
    while(1){
        if(idx === truck_weights.length)
            break;
        
        if(bridge.length === bridge_length){
            sum -= bridge[0];
            bridge.shift();
        }
        
        if(sum+truck_weights[idx] <= weight){
            sum += truck_weights[idx];
            bridge.push(truck_weights[idx++]);
        }
        else
            bridge.push(0);
        
        answer++;
    }
    
    return answer;
}

 

물론 자바스크립트 문법을 적재적소에 사용하여 더 깔끔한 풀이가 많을 것이다.

 

하지만 어쩌냐... 나는 아직 이게 최선이다...

 

 

 

자바스크립트로 원트에 통과되는 날이 오길 고대하며...