- 보트에는 한 번에 최대 2명씩 탈 수 있고, 무게 제한 있음
- 보트를 최대한 적게 사용해서 모든 사람 구출
최대한 가장 가벼운 사람과 가장 무거운 사람을 묶어서 보트에 태우면 사용하는 보트의 개수가 최소가 됨
가장 가벼운→무거운 사람 순으로 오름차순 정렬
첫번째 인덱스(가장 가벼운 사람)와 마지막 인덱스(가장 무거운 사람)를 더하면서 limit과 비교
import java.util.*;
class Solution {
public int solution(int[] people, int limit) {
// 가장 가벼운->무거운 순으로 정렬
Arrays.sort(people);
int len = people.length;
int cnt = 0;
// 최대한 가장 가벼운 사람 + 가장 무거운 사람의 조합으로 넣기 위해 양쪽 끝에서부터 이동
// 둘의 합이 limit을 초과하면 가장 무거운 사람은 나머지 다른 사람들과 같이 타도 무조건 limit 초과
int leftIdx = 0, rightIdx = len - 1;
int boat = 0;
while (cnt < len) {
if (people[leftIdx] + people[rightIdx] <= limit) {
leftIdx++; rightIdx--;
cnt += 2;
} else {
rightIdx--;
cnt++;
}
boat++;
}
return boat;
}
}