https://programmers.co.kr/learn/courses/30/lessons/42885
코딩테스트 연습 - 구명보트
무인도에 갇힌 사람들을 구명보트를 이용하여 구출하려고 합니다. 구명보트는 작아서 한 번에 최대 2명씩 밖에 탈 수 없고, 무게 제한도 있습니다. 예를 들어, 사람들의 몸무게가 [70kg, 50kg, 80kg, 5
programmers.co.kr
그리디 알고리즘, 레벨2 문제이며 문제를 자세히 보는것이 중요하다.
"구명보트는 하나에 2명까지만 탈 수 있다"
이거를 체크하지 않아서, 통과를 하지 못했었는데 위 문구만 보면 그렇게 어려운 문제는 아니다.
다음와 같이 해결하면 된다.
- 몸무게 순 오름차순 정렬
- 가장 높은 몸무게 + 가장 낮은 몸무게로 통과 여부 체크
예제 코드는 아래와 같다.
import java.util.*;
class Solution {
public static int solution(int[] people, int limit) {
int answer = 0;
Arrays.sort(people);
boolean visit[] = new boolean[people.length];
int min = 0;
for (int i = people.length-1; i>=min; i--) {
if (people[i] + people[min] <= limit) {
min++;
answer++;
} else {
answer++;
}
}
return answer;
}
}