문제 출처 - Programmers
문제는 여기
[풀이]
1. 입력으로 주어지는 people을 정렬해준다.
2. 왼쪽과 오른쪽을 가리키는 포인터를 2개 만들어준다.
3. 가장 작은 사람과 가장 큰 사람의 합이 limit보다 작다면 가장 작은 사람이 보트에 탈 수 있으므로 left의 값을 증가시킨다.
4. 아니라면 큰 사람만 탈 수 있으므로 right를 감소시킨다.
5. 보트에 사람이 탔으므로 보트를 나타내는 answer를 증가시킨다.
6. 3. ~ 5. 의 과정을 left와 right가 같아질 때까지 반복한다.
7. 결과를 출력한다.
[접근]
1. 가장 조금 보트를 사용하는 방법이 무엇일까를 생각해보다가 가장 무거운 사람과 가장 가벼운 사람을 같이 태우는 것이라고 생각하였고 이 아이디어를 바탕으로 문제를 해결했다.
[코드]
import java.util.*;
class Solution {
public int solution(int[] people, int limit) {
int answer = 0;
// people 오름차순 정렬
Arrays.sort(people);
// 왼쪽과 오른쪽
int left = 0;
int right = people.length - 1;
// 서로 만날때까지 반복
while (left <= right) {
// 가장 작은 사람 + 가장 큰 사람이 제한보다 작으면
if (people[left] + people[right] <= limit)
// 작은사람이 탄 것으로 간주
left++;
// 큰사람은 항상 보트에 탐
right--;
// 보트 횟수 증가
answer++;
}
return answer;
}
}
'문제 풀이 > Programmers' 카테고리의 다른 글
[프로그래머스] 정수 내림차순으로 배치하기 (0) | 2022.05.22 |
---|---|
[프로그래머스] 등굣길 (JAVA) (0) | 2022.05.20 |
[프로그래머스] 핸드폰 번호 가리기 (JAVA) (0) | 2022.05.15 |
[프로그래머스] 거스름돈 (JAVA) (0) | 2022.05.13 |
[프로그래머스] 2 x n 타일링 (JAVA) (0) | 2022.05.11 |