https://programmers.co.kr/learn/courses/30/lessons/42885
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는 따로 대입하지 않아도 되네...? 이걸 이제 알다니!🤣
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을 넘어가면 가장 큰값을 제외하는 식이다. 양쪽을 더한다는 원리를 잘 기억해두자! 예전에도 사용했던 것 같고, 두고두고 사용될 것 같다.