[프로그래머스] 구명보트
2020. 6. 22. 16:19ㆍ프로그래머스/LEVEL 2
import java.util.*;
class Solution {
public int solution(int[] people, int limit) {
int answer = 0;
int minPeople=0;
int maxPeople=people.length-1;
Arrays.sort(people);
while(true){
if(minPeople==maxPeople){
answer++;
break;
}
if(minPeople+1==maxPeople){
if(people[minPeople] + people[maxPeople]<=limit){
answer++;
break;
}else{
answer+=2;
break;
}
}
if(people[minPeople] + people[maxPeople]<=limit){
minPeople++;
maxPeople--;
answer++;
}else{
maxPeople--;
answer++;
}
}
return answer;
}
}
1. 최대 인원이 두명인 것이 포인트인 것 같다.
2. 사람들을 무게순으로 정렬한다음, 가장 무거운사람이 가장 가벼운사람과 함께 탈 수 있는지를 검사하면된다.
3. minPeople은 0부터, maxPeople은 people의 가장 끝 인덱스부터 출발한다.
4. 해당 인덱스의 두 사람의 무게를 더한것이 limit보다 작다면 둘을 함께 태워보내므로 두 인덱스 모두 변화를 주고, answer++한다.
5. 해당 인덱서의 두 사람의 무게를 더한것이 limit보다 크다면 가장 무거운 사람은 혼자 타고 가야하므로, maxPeople의 인덱스에 변화를 주고 answer++ 한다.
6. 인덱스가 변화해가면서, 두 인덱스의 차이가 1이라는 의미는 보트를 타지못한사람이 두명만 남은 것을 의미하므로 함께 탈수있는지 없는지에 따라 answer값에 변화를 주고 while문을 끝낸다.
7. 두 인덱스가 같아진다면 한사람만 남았으므로 answer++ 하고 while문을 끝낸다.
'프로그래머스 > LEVEL 2' 카테고리의 다른 글
[프로그래머스] 다음 큰 숫자 (0) | 2020.06.30 |
---|---|
[프로그래머스] 숫자 야구 (0) | 2020.06.22 |
[프로그래머스] 폰켓몬 (0) | 2020.04.13 |
[프로그래머스] 점프와 순간이동 (0) | 2020.04.13 |
[프로그래머스] N개의 최소공배수 (0) | 2020.04.12 |