1. 구명보트
- 프로그래머스 Level - 2 정답률 68%로 쉬워 보이는 문제
- 보트에는 최대 2명만 탈 수 있음.
- 최대 허용 몸무게가 limit으로 주어짐.
- 사람들의 몸무게를 담은 배열이 new int[]{}주어짐
- 이 때 가장 최소로 보트를 사용할 수 있는 경우의 수를 구해라
2. 초반 접근
- 최대 2명인 것도 못보고,, 그냥 sort해서 가벼운 사람부터 꽉꽉 태우면 되겠지.. 생각
- 최대 2명인 경우 = 가장 가벼운 사람 + 가장 무거운 사람으로 구성하면 최소로 태울 수 있음!!!!!
2-1. 이차접근 실패
- 위의 사실을 깨닫고 코딩 진행.
- 하지만 LinkedList형태로 만약 people[firstIndex] + people[lastIndex] <= limit이라면 remove를 했어서 시간 초과 오류와 index문제 발생.
- 단순하게 생각해서 만약 위의 경우라면 answer ++ 하고 Firstindex ++, LastIndex--를 해주면 그 경우를 제외하고 다시 탐색하게 됨.
- while(조건) 조건을 한번에 정의하지 못함.
- 조건은 LastIndex>=FirstIndex여야 함.. 같은 경우까지 포함해야함으로
3. 정답코드
public class Solution14 {
public static int solution(int[] people, int limit) {
Arrays.sort(people);
int answer = 0;
int index = 0 ;
int len = people.length-1;
while(index<=len){
if(people[index]+people[len]<=limit){
answer++;
len--;
index++;
}else{
answer++;
len --;
}
}
return answer;
}
- 정말 간단한 문제였는데 생각하는 힘이 많이 죽었다...
- 조금만 더 생각하고 문제풀자