그리디 - 구명 보트
https://programmers.co.kr/learn/courses/30/lessons/42885
function solution(people, limit) {
people.sort((a, b) => b - a);
let max = 0;
let min = people.length - 1;
let cnt = 0;
// max 인덱스가 min 보다 커지면 사람이 다 보트에 탔다는 것이므로 종료조건은 다음과 같다.
while (max < min) {
if (people[max] + people[min] <= limit) {
// max가 보트에 타고, 그 다음 가장 무거운 사람으로 넘어간다.
max++;
// min이 보트에 함께 타고, 그 다음 가장 가벼운 사람으로 넘어간다.
min--;
// else인 경우는 더했을 때 limit보다 큰 것이므로 max 한 명만 보트에 탈 수 있다.
} else max++;
cnt++;
}
// ex ) [80,70,60,50,10,10], 100
// 이 경우에 while문을 나왔을 때 max = 3, min = 3이 되지만
// 몸무게 min은 아직 보트에 타지 못했으므로 cnt ++ 해서 보트에 마지막에 태워준다.
if (max == min) cnt++;
return cnt;
}