[프로그래머스] 구명보트

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문을 끝낸다.