구명보트

유태형·2022년 2월 16일
0

문제

문제 분석

배열의 원소에 따라 답이 달라지므로 정렬이 필요해 보인다.




풀이

정렬

원소의 크기에 따라 혼자냐 둘이 타냐가 결정 되기 때문에 정렬이 필요하다. Arrays.sort(배열)로 오름차순으로 정렬 하였다.

최소와 최소

최소의 보트 횟수 즉 가능하면 둘이 태울 수 있어야 한다.
제일 작은 것과 그다음 작은것 순서대로 진행하면 최소한의 보트수로 진행할 수 있을까? 아니다.

최소와 최대

[40,40,50,50,60,60], 100이 주어졌다고 생각해보자 오름차순으로 정렬되어 있으므로 최소 2개씩 부터 카운트하면 (40,40), (50,50), 60, 60순으로 보트가 4개 필요하다. 하지만 최소와 최대로 조합하면 (40,60), (40,60), (50,50)순으로 보트가 3개 필요하므로 보트를 최소한으로 사용할 수 있다.

 	 int left = 0;
 	 int right = people.length - 1;
   
   while(left <= right){
       if(people[left] + people[right] <= limit){
          left++;
          right--;
       }else
           right--;
       
       answer++;
   }

left변수는 최소값을 담고 right변수는 최대값을 담는다.
최소와 최대를 모두 태울 수 있으면 태우고 최소와 최대 둘다 태울 수 없으면 최대만 태운다.(보트의 낭비를 줄이기 위해)

탑승하면 leftright변수가 한칸 씩 앞으로 이동한다고 생각하면 될 것이다.




코드

import java.util.*;

class Solution {
    public int solution(int[] people, int limit) {
        int answer = 0;
        Arrays.sort(people);
        int left = 0;
        int right = people.length - 1;
        
        while(left <= right){
            if(people[left] + people[right] <= limit){
                left++;
                right--;
            }else
                right--;
            
            answer++;
        }
        return answer;
    }
}



GitHub

https://github.com/ds02168/Study_Algorithm/blob/master/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4/%EC%9E%90%EB%B0%94/Level2/%EA%B5%AC%EB%AA%85%EB%B3%B4%ED%8A%B8.java

profile
오늘도 내일도 화이팅!

0개의 댓글

관련 채용 정보