PS/프로그래머스

[Level2][Javascript] 구명보트

returnzero 2022. 6. 24. 19:48
function solution(people, limit) {
    var answer = 0;
    people.sort(function(a,b){return a-b});
    let a=0;
    while(people.length){
        let weight = people.pop();
        let min_index= people.length;
        if(weight+people[min_index]>limit){
            answer++;
            continue;
        }
        for(let i= min_index;i>=0;i--){
            if(limit-weight>people[i]){
                min_index=i;
            }
            if(limit-weight===people[i]){
                min_index=i;
                break;
            }
        }
        people.splice(min_index,1);
        answer++;
    }
   
    return answer;
}

시간상 통과가 안되는 풀이다. 정답은 맞으나 더 효율적인 풀이 존재. 투 포인터로 풀어야 한다.

그리디의 성질을 만족하고 있기 때문에 탐욕적으로 풀면 된다. 굳이 limit에 가까운 두 쌍을 찾을 필요가 없다.

 

하기의 풀이는 타인의 풀이다.

function solution(people, limit) {
    var answer = 0;
    people = people.sort((a,b)=>b-a)
    for(let i =0, j = people.length-1; i <= j ; i++ ){
        if(people[i]+people[j] <= limit) j--
        answer++
    }

    return answer;
}