[Programmers]-구명보트

문제

우리가 아는 무인도에서 최소 몇개 구명보트를 써서 탈출하면 되는 문제이다. 여기서 조건은 최소 무게가 있다. 또 한번에 최대 2명씩 탄다. 문자열배열(people)에 사람들 무게를 받는다. limit는 구명보트의 무게 제한이다. 최소 몇개의 구명보트 개수가 필요한지 반환하면 되는문제이다.

코드

import java.util.*;

class Solution {
    public int solution(int[] people, int limit) {
        int answer = 0;
        
        Arrays.sort(people);
        
        ArrayList<Integer> list = new ArrayList<Integer>();
        
        for(int a : people) list.add(a);
        
        while(list.size() > 1){
            
            if(list.get(0)+list.get(list.size()-1) <= limit)
                list.remove(0);
            list.remove(list.size()-1);
            answer++;
        }

        return list.size()==1 ? ++answer : answer;
    }
}

코드 설명

처음에 정렬은 한뒤 앞에서부터 차례대로 내보내려고했는데

이렇게되면 무게가 낮은사람들 먼저 내보내면서 보트를 더 써야된다. 그래서 가벼운사람과 무거운사람을 묶어 내보내는게 가장 최소값으로 내보낼 수 있다.

요약

  • 그리디알고리즘이다.
  • 갈수록 뭔가 어려워지는것 같다.