[プログラマー]42885号:救命ボート




コード#コード#

import java.util.Arrays;

public class PRO_42885 {
    public static int solution(int[] people, int limit) {
        Arrays.sort(people);

        int answer = 0;
        int min = 0;
        int max = people.length - 1;

        while (min <= max) {
            if (people[min] + people[max] <= limit) ++min;
            --max;
            ++answer;
        }
        return answer;
    }

    public static void main(String[] args) {
        int[] people = {70, 50, 80, 50};
        int limit = 100;

        System.out.println(solution(people, limit));
    }
}

答えと感じ


体重を昇順に並べる.最小値と最大値を加算した値が限界値以下の場合は、最小値を増やし、最大値を減らしながら答えを増やします.これは二人でボートを使うのと同じだ.条件文を満たさなければ、最大体重の人が一人でボートを使うことを意味し、最大値を減らし、答えを増やすだけだ.

参考資料