Java Coding Test 침몰하는 타이타닉

song yuheon·2023년 11월 18일
0

Java Algorithm

목록 보기
16/18
post-thumbnail

문제


이 문제는 "침몰하는 타이타닉"이라는 유럽의 유명한 유람선에 관한 것입니다. 이 유람선에는 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));
	}
}

테스트



profile
backend_Devloper

0개의 댓글