개발 공부 일지/JavaScript

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

yelimu 2025. 3. 21. 22:46

https://school.programmers.co.kr/learn/courses/30/lessons/42885

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

탐욕법으로 카테고리 되어있는데 잘 풀리지않아서 투포인터로 풀이하게 됐다

function solution(people, limit) {
    var count = 0;
    people.sort((a,b)=> b - a)
    let left = 0, right = people.length -1;
    
    while(left <= right){
        if(people[left] + people[right] <= limit){
            left ++;
            right --;
            count ++;
        } else{
            left ++;
            count ++;    
        }
    }
    return count;
}

투포인터가 뭔지는 이제 알겠는데, 언제 left ++ 이고 right --인지 좀 헷갈렸다;

일부 케이스만 통과하기도 하고

결국은 손으로 써가면서 각 케이스마다 어떻게 포인터를 이동할 것인지 이해할 수 있었다.


[다른 사람 풀이]

for문을 써서 투포인터를 적용

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