https://school.programmers.co.kr/learn/courses/30/lessons/42885
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
위 문제는 탐욕법으로 해결하였다.
2022.09.20 - [알고리즘] - [알고리즘] 탐욕 알고리즘(Greedy Algorithm)
[알고리즘] 탐욕 알고리즘(Greedy Algorithm)
탐욕 알고리즘(Greedy Algorithm) 이란? 탐욕 알고리즘은 선택의 순간마다 최적의 상황만을 쫓아 빠르게 최종 해답에 도달하는 방법이다. 순간마다 하는 선택은 최적이지만, 최종 선택이 최적의 해답
habinh.tistory.com
문제
풀이 방법
- 배열 people을 오름차순으로 정렬한다.
- 정렬한 people의 최소 몸무게와 최대 몸무게의 합을 구하고 limit이 넘지 않을 경우 둘을 보트에 태워보낸다.
(min 인덱스 +1, max 인덱스 -1, .answer +1) - 정렬한 people의 최소 몸무게와 최대 몸무게의 합이 limit을 넘을 경우 최대 몸무게인 사람만 보트에 태워보낸다.
(max 인덱스 -1, answer +1) - min 인덱스가 max 인덱스와 같아지면 남은 한명을 태워보내고 반복문을 종료한다.
(answer +1) - min 인덱스가 max 인덱스보다 커지면 모두 태워보낸것이므로 반복문을 종료한다.
디버깅
- 입력
people | limit |
[70, 50, 80, 50] | 100 |
- 결과
3 |
- 디버깅
people | limit | min | max | answer (보트 수) |
[70, 50, 80, 50] | 100 | |||
[50, 50, 70, 80] | 100 | 0 | 3 | 0 |
[50, 50, 70, 80] | 100 | 0 | 2 | 1 |
[50, 50, 70, 80] | 100 | 0 | 1 | 2 |
[50, 50, 70, 80] | 100 | 1 | 0 | 2 |
소스 코드
import java.util.Arrays;
class Solution {
public int solution(int[] people, int limit) {
int answer = 0;
Arrays.sort(people); // 오름차순 정렬
int min = 0;
int peopleLen = people.length;
for (int max = peopleLen - 1; min <= max; max--) {
// 두 사람의 몸무게 합이 limit 이하일 경우 min에 해당하는 사람도 보트에 태워보낸다.
if (people[min] + people[max] <= limit) {
min++;
}
// max에 해당하는 사람도 보트에 태워보내고, 사용한 보트의 수를 증가시킨다.
answer++;
}
return answer;
}
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 124 나라의 숫자 (0) | 2022.09.03 |
---|---|
[프로그래머스] 주식가격 (0) | 2022.09.03 |
[프로그래머스] 최솟값 만들기 (0) | 2022.09.03 |