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문은 무거운 사람의 변수부터 가벼운 사람의 변수까지 진행한다.
만약 무게제한보다 현재 순서의 몸무게 + 가벼운 사람의 몸무게가 가볍다면
가벼운 사람의 변수를 증가해주고 횟수를 증가시킨다.
이때 반복문을 가벼운 사람의 변수까지로 지정했기 때문에 반복 횟수도 감소하게 된다.
'프로그래머스' 카테고리의 다른 글
[프로그래머스] 신규 아이디 추천 (JAVA) (1) | 2025.02.01 |
---|---|
[프로그래머스] 영어 끝말잇기 (JAVA) (1) | 2025.01.25 |
[프로그래머스] 이진 변환 반복하기 (JAVA) (3) | 2025.01.25 |
[프로그래머스] 2016년 (JAVA) (4) | 2025.01.25 |
[프로그래머스] 덧칠하기 (JAVA) (2) | 2024.12.28 |