본문 바로가기

컴퓨터 프로그래밍/알고리즘

프로그래머스-구명보트

https://programmers.co.kr/learn/courses/30/lessons/42885

 

코딩테스트 연습 - 구명보트

무인도에 갇힌 사람들을 구명보트를 이용하여 구출하려고 합니다. 구명보트는 작아서 한 번에 최대 2명씩 밖에 탈 수 없고, 무게 제한도 있습니다. 예를 들어, 사람들의 몸무게가 [70kg, 50kg, 80kg, 5

programmers.co.kr

<내풀이>

너무 복잡하게 푼 것 같다. 먼저 오름차우순으로 정렬해줍니다. 

1. 먼저 몇번째 인덱스 부터 limit의 1/2이 넘는지 확인합니다. 

2. index의 의미는 limit/2인 것의 갯수 입니다. 그리고 limit/2보다 큰 수가 시작 되는 index 입니다. 

3. limit/2작은 수중에서 가장 작은 수부터, limit/2보다 큰 수중에서 가장 큰수부터 차례대로 더해서 limit보다 작거나 같은 수가 있는지 찾습니다. 

4. 그 수가 있다고 하면, 차례대로 짝을 찾습니다. 그러면, 짝은 찾지 못한 limit/2보다 작은 수와 큰수가 있는데, limit/2보다 작은 수들은 자기들끼리 2명씩 더하면 limit보다 작으므로 2로 나눕니다. 하지만, 홀수일 경우에는 하나 남은건 보트 하나가 되므로 나눈 것을 올림해 줍니다. count=limit/2보다 작은 수의 갯수 number=limit/2보다 큰수중에서 매칭 됐을 경우 시작하는 index를 매칭 된 것보다 -1해서 조정해줍니다. 

5. 결과: answer에다가 남은 limit/2보다 작은 수들 그리고 짝지어지지 않은 limit/2보다 큰수들을 더해줍니다.

package algorithm_2;

import java.util.Arrays;

public class l14 {
	public static int solution(int[] people, int limit) {
		int answer = 0;
		Arrays.sort(people);
		int index=0;
		for(int i =0; i<people.length;i++) {
			if(people[i]>(double)limit/2) {
				index=i;
				break;
			}
		}
		//limit/2보다 작은 것의 갯수: index
		int number = people.length-1;
		int count = index;
		for(int j = 0; j<index;j++) {
			for(int k = number ;k>=index;k--) {
				if(people[j]+people[k]<=limit) {
					count--;
					answer++;
					number=k-1;
				break;
			}
			}
		}
		System.out.println(count);
		answer+=(int)Math.ceil((double)count/2)+people.length-index-answer;
	
	return answer;
	}
	public static void main(String[] args) {
	  int[] people = { 70, 50, 80, 50 }; int limit = 100;
		/*	int[] people = { 70, 80, 50 };
		int limit = 100;*/
		  
		System.out.println(solution(people, limit));

	}
}

<남풀이>

import java.util.Arrays;

class Solution {
    public int solution(int[] people, int limit) {
        Arrays.sort(people);
        int i = 0, j = people.length - 1;
        for (; i < j; --j) {
            if (people[i] + people[j] <= limit)
                ++i;
        }
        return people.length - i;
    }
}

아,,,이게 보면 참 이런게.ㅋㅋㅋㅋㅋ쉬워보여....ㅋㅋㅋㅋ생각하기가 힘드네요.ㅋㅋㅋㅋ