Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

Life Engineering

[프로그래머스] 구명보트 (Java) 본문

Problem Solving

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

흑개 2022. 2. 19. 15:30

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

 

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

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

programmers.co.kr

import java.util.Arrays;

class Solution {
    public int solution(int[] people, int limit) {
        int boat=0;
        Arrays.sort(people);		//오름차순으로 정렬
        int q=limit;
        int start=0;				//최소값부터 시작하는 포인터
        int end=people.length-1;    //최대값부터 시작하는 포인터
        while (start<end){	//두 포인터가 겹치지 않을 때까지
            if (people[start]+people[end]<=limit){	//최소 포인터, 최대 포인터의 합이 limit 넘지 않으면 
                boat++;		//보트 수 증가
                start+=1;	//최소 포인터 오른쪽으로 1 이동
                end-=1;		//최대 포인터 왼쪽으로 1 이동
            }
            else{			//두 합이 limit 넘으면
                end-=1;		//최대 포인터 왼쪽으로 이동시켜주기
            }
        }
        return boat+(people.length-boat*2);	//보트 수+남은 사람들의 합
    }
}

정렬해서 최대값, 최소값들을 각각 채우는 방식이다.

두 개의 포인터를 이동시켜주는게 포인트다.

 

여기서 답을 구할 때 answer++을 매번 증가시켜도 된다.

limit을 초과하는 경우 한명만 타게 되므로 이때도 구명보트 개수 하나 추가된다.

 

또 start==end 가 될때는 한명이 마저 남은 경우이므로, answer+1 을 해줘야 한다.