코딩 테스트/프로그래머스

프로그래머스 - 구명 보트 문제 - 자바

programmers.co.kr/learn/courses/30/lessons/42885

 

코딩테스트 연습 - 구명보트

무인도에 갇힌 사람들을 구명보트를 이용하여 구출하려고 합니다. 구명보트는 작아서 한 번에 최대 2명씩 밖에 탈 수 없고, 무게 제한도 있습니다. 예를 들어, 사람들의 몸무게가 [70kg, 50kg, 80kg, 5

programmers.co.kr

그리드 문제로 가장 작은 사람과 가장 큰 사람이 보트에 동시에 탈수있는지 없는지로 해결하는 문제

상당히 간단한 문제인데 저는 처음에 limit에서 가장 큰사람을 빼고 남은 무게에 가장 가까운 사람을 같이 태워 보내야한다고 생각을 했습니다. 

사람의 무게가 1 2 3 4 6 7이고 제한이 10일때

(1, 7), (2, 6), (3, 4)

(3, 7), (4, 6), (1, 2)

두가지 모두 이용하는 배의수는 같은데 말이죠...

import java.util.Arrays;

// 프로그래머스 구명보트 문제
class LifeBoat {
    public int solution(int[] people, int limit) {
        int answer = 0;
        // 정렬
        Arrays.sort(people);

        int min = 0; // 가장 작은 값의 idx 값
        for(int max = people.length - 1; min <= max; max--) {
            // 가장 큰값과 가장 작은 값의 합이 구명보트의 제한보다 작거나 같은경우 둘을 같이 처리
            if(people[min] + people[max] <= limit) {
                min++;
            }
            answer++;
        }

        return answer;
    }
}