코딩테스트 문제풀이

[프로그래머스] 구명보트 - Greedy

지잉지잉 2021. 9. 13. 21:19

1. 문제

2. 풀이

import java.util.*;
class Solution {
    public int solution(int[] people, int limit) {
        int answer = 0;
        
        Arrays.sort(people);
        
        List<Integer> list = new ArrayList<Integer>();
        for (int i = 0; i < people.length; i++) {
            list.add(people[i]);
        }

        while (list.size() > 1) {
            if (list.get(0) + list.get(list.size() - 1) <= limit) {
                list.remove(list.size() - 1);
                list.remove(0);
                answer ++;
            } else {
                list.remove(list.size() - 1);
                answer++;
            }
        }
        
        if (list.size() == 1) {
            answer++;
            list.remove(0);
        }
        
        return answer;
    }
}
  • 먼저 people을 오름차순 정렬한 후, list에 추가한다. (넣고 빼기 용이하게 하기위해)
  • list는 0번째 인덱스가 항상 최소값이며 마지막 요소가 항상 최대값이다.
  • 최대값을 하나씩 빼되, 최소값과 비교하여 limit 변수보다 작거나 같을 때, 두개의 원소를 동시에 삭제하며 answer++한다. (하나의 배에 두명을 태운다.)
  • 그렇지 않으면 마지막 원소를 하나씩 제거한다.

출처: https://programmers.co.kr/learn/courses/30/lessons/42885