본문 바로가기

코딩테스트

프로그래머스(JAVA) - level2(구명보트)

문제정리

구명보트는 최대 2명씩 (그러면 한명도 탈 수 있음), 무게 제한은 100kg
모든 사람을 구출하기 위해 필요한 구명보트 개수의 최솟값을 return

처음 작성한 코드

import java.util.Arrays;

class Solution {
    public int solution(int[] people, int limit) {
        int answer = 0;
        Arrays.sort(people);

        int a = 0;
        int b = people.length - 1;

        while(a < b){
            int sum = people[a] + people[b];
            if(limit >= sum){
                answer++;
                b--;
                a++;
            }else{
                answer++;
                b--;
            }
        }
        return answer;
    }
}

위와 같이 했는데 else에도 answer++;를 적용한 이유는 b-- 라는 부분 큰 수 값도 더하고 그 총 값을 return 했는데 근데 이제 문제는 people[0]이 만약 다른 값과 더했을 때 limit값을 넘어가서 혼자남아있게 되면 이 값은 포함되지 않는다는것..

최종 코드

class Solution {
    public int solution(int[] people, int limit) {
        int answer = 0;
        Arrays.sort(people);

        int a = 0;
        int b = people.length - 1;

        while(a < b){
            int sum = people[a] + people[b];


            if(limit >= sum){
                answer++;
                b--;
                a++;
            }else{
                b--;
            }
        }
        return people.length - answer;
    }
}

 

쉽게 생각해서..sum 값이 limit보다 작거나 같을때 answer 값을 하나씩 올리고, 그 값을 전체 인원수에서 빼기만 하면 모든 사람을 구출하기 위해 필요한 구명보트 개수의 최솟값을 구할 수 있잖아..?

한번 막혀가지고.. Array.list도 사용해보고 이것저것 해보느라

 

시간은 1시간.. 넘게걸림...;;;

(변수명도 좀 생각하면서 해야할까..?)