이 문제는 "침몰하는 타이타닉"이라는 유럽의 유명한 유람선에 관한 것입니다. 이 유람선에는 N명의 승객이 탑승해 있으며, 타이타닉이 침몰 중입니다. 구명보트를 사용하여 탈출해야 하는 상황인데, 각 구명보트는 최대 2명까지만 태울 수 있고, 보트 한 대당 최대 허용 무게는 M kg입니다. 프로그램은 승객들의 몸무게 배열(nums)과 보트 한 대에 탈 수 있는 최대 무게(m)를 입력으로 받아, 모든 승객이 탈출할 수 있는 최소한의 구명보트 수를 계산하여 반환해야 합니다.
입출력 예:
입력: 승객의 몸무게 배열(nums), 보트당 최대 허용 무게(m)
출력: 모든 승객이 탈출하기 위한 최소 구명보트 수
제한 사항:
nums 배열의 길이는 최대 200,000입니다.
m의 값 M은 70kg에서 10,000kg 사이입니다.
승객의 몸무게는 50kg에서 1,000kg 사이이며, 이는 M을 초과하지 않습니다.
package inflearn_231118;
import java.util.*;
import java.util.stream.Collectors;
class Solution {
public int solution(int[] nums, int m){
int answer = 0;
int next=nums.length-1;
List<Integer> numLists = Arrays.stream(nums).boxed().sorted().collect(Collectors.toList());
while(!numLists.isEmpty()) {
if(0==next)
numLists.remove(0);
else if(numLists.get(0)+numLists.get(next)<=m)
{
numLists.remove(0);
next--;
numLists.remove(next);
next--;
}
else {
numLists.remove(next);
next--;
}
answer++;
}
return answer;
}
public static void main(String[] args){
Solution T = new Solution();
System.out.println(T.solution(new int[]{90, 50, 70, 100, 60}, 140));
System.out.println(T.solution(new int[]{10, 20, 30, 40, 50, 60, 70, 80, 90}, 100));
System.out.println(T.solution(new int[]{68, 72, 30, 105, 55, 115, 36, 67, 119, 111, 95, 24, 25, 80, 55, 85, 75, 83, 21, 81}, 120));
}
}