[프로그래머스] 구명보트 (Java)
https://school.programmers.co.kr/learn/courses/30/lessons/42885
입력 : 사람들의 몸무게를 담은 배열 people[] / 구명보트의 무게 제한 limit가
출력 : 모든 사람을 구출하기 위해 필요한 구명보트 개수의 최솟값
O(nlogn)
그리디
없음
없음
구현
import java.util.*;
class Solution {
public int solution(int[] people, int limit) {
Arrays.sort(people); // 1단계: 배열 정렬
int lightest = 0; // 가장 가벼운 사람을 가리키는 포인터
int heaviest = people.length - 1; // 가장 무거운 사람을 가리키는 포인터
int boats = 0; // 필요한 보트 수를 세는 변수
// 2단계: 투 포인터 기법을 사용하여 사람들을 짝지음
while (lightest <= heaviest) {
// 가장 가벼운 사람과 가장 무거운 사람이 함께 탈 수 있는지 확인
if (people[lightest] + people[heaviest] <= limit) {
lightest++; // 가장 가벼운 사람 포인터 이동
}
heaviest--; // 가장 무거운 사람 포인터 이동
boats++; // 보트 수 증가
}
return boats; // 필요한 보트 수 반환
}
}