https://programmers.co.kr/learn/courses/30/lessons/42885
코딩테스트 연습 - 구명보트
무인도에 갇힌 사람들을 구명보트를 이용하여 구출하려고 합니다. 구명보트는 작아서 한 번에 최대 2명씩 밖에 탈 수 없고, 무게 제한도 있습니다. 예를 들어, 사람들의 몸무게가 [70kg, 50kg, 80kg, 5
programmers.co.kr
import java.util.Arrays;
class Solution {
public int solution(int[] people, int limit) {
int answer = 1;
int rest = limit;
int i = 0; // 가장 가벼운 사람
int j = people.length - 1; // 가장 무거운 사람
Arrays.sort(people);
while(i <= j) {
if(rest >= people[i] + people[j]) {
rest -= people[i] + people[j];
i++;
j--;
} else if (rest >= people[j]) {
rest -= people[j];
j--;
} else if (rest >= people[i]) {
rest -= people[i];
i++;
} else {
answer++;
rest = limit;
}
}
return answer;
}
}
1) 가장 가벼운 사람 + 가장 무거운 사람 2명을 태울 수 있으면 태워본다.
2) 1)이 불가능이면, 무거운 사람을 태운본다.
3) 2)가 불가능이면, 가벼운 사람을 태워본다.
4) 3)도 불가능하면, 새로운 보트를 구해온다.
처음엔, 그냥 가벼운 사람부터 or 무거운 사람부터 차례로 태워보내면 되는줄 알았는데, 아니었음...
'JAVA > 프로그래머스' 카테고리의 다른 글
29. LEVEL 2 - 거리두기 확인하기 - BFS (0) | 2021.08.25 |
---|---|
28. LEVEL 2 - 큰 수 만들기- Greedy (0) | 2021.08.17 |
27. LEVEL 2 - 타겟 넘버 - DFS/재귀 (0) | 2021.08.16 |
26. LEVEL 3 - 네트워크 - BFS/DFS (0) | 2021.08.13 |
25. 자연수 뒤집어 배열로 만들기(String, StringBuilder) (0) | 2021.02.28 |