문제: https://school.programmers.co.kr/learn/courses/30/lessons/42885
1. 코드
import java.util.*;
class Solution {
public int solution(int[] people, int limit) {
int answer = 0;
Arrays.sort(people);
int left = 0;
for(int i = people.length - 1; i >= left; i--) {
if(people[i] + people[left] <= limit)
left++;
answer++;
}
return answer;
}
}
2. 설명
int answer = 0;
Arrays.sort(people);
people을 오름차순으로 정렬합니다. 내림차순으로 정렬하면 더 편해지지만 오름차순으로 정렬해도 문제는 없습니다.
int left = 0;
for(int i = people.length - 1; i >= left; i--) {
if(people[i] + people[left] <= limit)
left++;
answer++;
}
left는 가장 작은 무게를 가리키는 인덱스 값입니다. 반복문을 통해서 내림차순으로 정렬된 people을 뒤에서부터 진행하여 오름차순처럼 진행합니다. 가장 무거운 무게와 가장 작은 무게의 비교 후 limit를 넘지 않는다면 left를 증가시켜서 가장 작은 사람도 구명보트에 탑승한 것으로 처리합니다.
만약 limit를 넘는다면 가장 무거운 사람만 구명보트에 탑승하기에 answer만 증가시킵니다.
3. 정리
- 가장 무거운 사람과 가장 가벼운 사람의 합이 limit를 넘으면 가장 무거운 사람만 탑승
- 가장 무거운 사람과 가장 가벼운 사람의 합이 limit를 넘지 않으면 가장 가벼운 사람만 탑승
- 정렬을 이용해 쉽게 해결
출처: 프로그래머스 코딩 테스트 연습,
https://school.programmers.co.kr/learn/challenges
'컴퓨터 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 12980번: 점프와 순간 이동 [Java] (0) | 2023.08.23 |
---|---|
프로그래머스 - 12985번: 예상 대진표 [Java] (0) | 2023.08.22 |
프로그래머스 - 92334번: 신고 결과 받기 [Java] (0) | 2023.08.20 |
프로그래머스 - 172928번: 공원 산책 [Java] (0) | 2023.08.19 |
프로그래머스 - 178871번: 달리기 경주 [Java] (0) | 2023.08.18 |