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

김예지·2021년 10월 21일
0

문제

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


문제 풀이

코드1

function solution(people, limit) {
    let answer=0;
    people.sort((a, b)=>b-a);
    let l=0;
    let r=people.length-1;
    
    while(l<r){
        const sum=people[l]+people[r];
        if(sum>limit) l++;
        else{
            l++;
            r--;
        }
        answer++;
    }
    if(l===r) answer++; //혼자 남았을 때 
    return answer;
}

투포인터 알고리즘 원리를 사용한 풀이다. 단순 for문으로 구현했다가 틀려서 찾아본 풀이인데, 첨에 내가 '투포인터 사용할 수 있지 않을까?'라는 생각을 그대로 옮겨놓은 코드를 발견했다. 생각했으면 손으로 움직이자!
그리고 sort는 따로 대입하지 않아도 되네...? 이걸 이제 알다니!🤣

코드2

function solution(people, limit) {
    let answer=0;
    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;
}

for문에서 변수를 두개 사용한다는 것이 신박한 방법이였다.
결국 코드1, 코드2의 원리는 같다. 가장 큰값+가장 작은값을 더하고 만약 limit을 넘어가면 가장 큰값을 제외하는 식이다. 양쪽을 더한다는 원리를 잘 기억해두자! 예전에도 사용했던 것 같고, 두고두고 사용될 것 같다.


참고 자료

profile
내가 짱이다 😎 매일 조금씩 성장하기🌱

0개의 댓글