본문 바로가기
Beakjoon&프로그래머스/Java

[프로그래머스/Java] 구명보트

by 현장 2026. 1. 2.

-Code

import java.util.*;

class Solution {
    public int solution(int[] people, int limit) {
        int answer = 0;
        // 순서대로 정렬
        Arrays.sort(people);
        // 덱에 데이터 넣기
        Deque<Integer> dq = new ArrayDeque<>();
        for (int person : people) {
            dq.addLast(person);
        }
        // 덱을 돌면서 확인
        while(!dq.isEmpty()) {
            // 가장 무거운 사람 꺼내기
            int heavy = dq.pollLast();
            // 현재 가장 무거운 사람 + 가장 가벼운 사람 합이 리미트 이하면 
            // 같이 태우기
            if (!dq.isEmpty() && dq.peekFirst() + heavy <= limit) {
                dq.pollFirst();
            }
            // 구명 보트 이동 횟수 증가
            answer++;
        }
        return answer;
    }
}

처음에는 가벼운 사람부터 검사해서 보트로 이동시켜서 틀렸습니다. 그래서 힌트를 얻은 게 가장 무거운 사람과 가벼운 사람을 더한 값을 비교해서 해보라는 것을 보고 해결할 수 있었습니다.