프로그래머스

[프로그래머스] 구명보트 (JAVA)

코 밑 2025. 1. 25. 19:51
Contents

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

다양한 몸무게를 가진 사람들과 무게제한이 있는 한 대의 구명보트가 있다.

구명보트를 이용해 최소한의 이동으로 모든 사람의 이동을 해야하는 문제다.

 

구명보트에는 두명까지 한번에 탑승할 수 있지만 무게제한을 넘어서는 안된다.

무게제한이 100kg인 보트라면 60kg, 40kg인 사람들 두명이 한번에 탈 수 있다.

 

// 프로그래머스 구명보트
// 무게 제한이 있는 보트를 최소한의 이동으로 사람들을 모두 옮겨야 함
// people -> 사람들의 몸무게가 있는 배열
// limit -> 보트의 수용 최대 무게
// 일단 정렬
// 일단 최대 회수로 반복
// 무거운 애부터 태움. 근데 가벼운 애를 태울 수 있다면 같이 태움
import java.util.*;

class Solution {
    public int solution(int[] people, int limit) {
        int answer = 0;

        Arrays.sort(people);

        // 가벼운 사람, 무거운 사람
        int light = 0;
        int heavy = people.length - 1;
		// 무거운 사람부터 가벼운 사람까지 역순
        for (int i = heavy; i >= light; i--) {
            if (people[i] + people[light] <= limit) {
            // 동시에 횟수 감소
                light++;
            }
            answer++;
        }

        return answer;
    }
}

 

일단 몸무게 배열을 오름차순으로 정렬해주었다.

가벼운 사람, 무거운 사람의 순서 변수를 지정해주고

역순으로 배열에서 무거운 사람부터 카운트를 해주었다.

이 때 for문은 무거운 사람의 변수부터 가벼운 사람의 변수까지 진행한다.

 

만약 무게제한보다 현재 순서의 몸무게 + 가벼운 사람의 몸무게가 가볍다면

가벼운 사람의 변수를 증가해주고 횟수를 증가시킨다.

이때 반복문을 가벼운 사람의 변수까지로 지정했기 때문에 반복 횟수도 감소하게 된다.

 

싸우지 말아요~