최대 두 명이 들어갈 수 있는 구명보트를 최소한 보내자! (무게 제한 고려)

→ 정렬을 해서 적은 몸무게 끼리 보내면 되지 않을까?

처음에는 몸무게가 작은 걸 먼저 고려한다면 많은 사람을 태울 수 있다고 생각했다. 하지만 구명 보트는 2명이라는 인원 제한이 존재한다!

따라서 가능한 경우는 다음과 같다.

이때 몸무게가 큰 사람의 경우 가장 작은 사람만 가능한 경우가 생길 수 있다. → 짝을 지어 보내자!


짝을 지어 보내는 로직은 다음과 같다.

  1. 만약 min pointer와 max pointer가 가리키는 사람이 묶여서 보내진다면, 2명 보내기
  2. 만약 무게 초과라면, 몸무게가 큰 사람인 max pointer(1명)를 보내기

Untitled

풀이 코드

import java.util.*;

class Solution {
    public int solution(int[] people, int limit) {
        int answer = 0;
        
        Arrays.sort(people);
        
        // min pointer & max pointer
        int min_pt = 0;
        int max_pt = people.length - 1;
        
        int n = 0; // 보낸 사람의 수
        while(n < people.length) {
            if(people[min_pt] + people[max_pt] <= limit) {
                n += 2;
                min_pt++;
                max_pt--;
            }
            else {
                n += 1;
                max_pt--;
            }
            answer++;
        }
        
        
        return answer;
    }
}