[프로그래머스 | Javascript] - 구명보트

임홍원·2023년 10월 17일


프로그래머스 | 구명보트

📍문제 설명📍

무인도에 갇힌 사람들을 구명보트를 이용하여 구출하려고 합니다. 구명보트는 작아서 한 번에 최대 2명씩 밖에 탈 수 없고, 무게 제한도 있습니다.
예를 들어, 사람들의 몸무게가 [70kg, 50kg, 80kg, 50kg]이고 구명보트의 무게 제한이 100kg이라면 2번째 사람과 4번째 사람은 같이 탈 수 있지만 1번째 사람과 3번째 사람의 무게의 합은 150kg이므로 구명보트의 무게 제한을 초과하여 같이 탈 수 없습니다.
구명보트를 최대한 적게 사용하여 모든 사람을 구출하려고 합니다.
사람들의 몸무게를 담은 배열 people과 구명보트의 무게 제한 limit가 매개변수로 주어질 때, 모든 사람을 구출하기 위해 필요한 구명보트 개수의 최솟값을 return 하도록 solution 함수를 작성해주세요.


💯성공한 풀이💯

function solution(people, limit) {
    var answer = 0;
    
    people.sort((a, b) => a - b);
    
    while(people.length > 0) {
        let w = people.pop();
        if(w + people[0] <= limit) people.shift();
        answer++;
    }
    
    
    return answer;
}

처음에는 문제를 잘못보았다. 최대2명까지인데 limit만 안넘으면 되는것으로 이해했다.
생각한 방법은 people을 정렬 후, 맨 앞 사람과 맨 뒷사람을 더한 무게가 limit을 넘으면 배열에서 제거하는 방식을 생각했다.

코딩테스트에서 shift를 사용하면 효율성 측면에서 문제가 생길 수 있다는것을 처음알았다.
앞으로는 shift를 사용하는것을 자제해야겠다.

이 문제는 투포인터로도 풀 수 있는것 같다.

profile
Frontend Developer

0개의 댓글