Algorithm/프로그래머스
[프로그래머스] 구명보트 (Java)
Carroti
2022. 11. 1. 17:59
문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
알고리즘
그리디, 투 포인터
풀이
몸무게가 가장 큰 사람을 항상 구명보트에 태우면서
몸무게가 가장 작은 사람을 같이 태울 수 있다면 같이 태우는 방법이 항상 구명보트를 제일 적게 쓸 수 있다.
따라서 몸무게를 오름차순으로 정렬한 후
남아있는 사람의 몸무게 중 가장 낮은 몸무게의 인덱스를 가리키는 left 와
남아있는 사람의 몸무게 중 가장 큰 몸무게의 인덱스를 가리키는 right 를 정하고,
모든 사람을 다 태울때까지 (left > right)
구명보트를 하나 사용(answer++)하면서 몸무게가 가장 높은 사람을 태우고(right--)
몸무게가 가장 낮은 사람도 태울 수 있다면(people[left] + people[right] <= limit) 같이 태운다(left++)
코드
import java.util.*;
class Solution {
public int solution(int[] people, int limit) {
Arrays.sort(people);
int answer = 0;
int left = 0;
int right = people.length - 1;
while(left <= right) {
if(people[left] + people[right] <= limit)
left++;
right--;
answer++;
}
return answer;
}
}