프로그래머스 - 구명보트

이형석·2024년 6월 20일

알고리즘 Phase1

목록 보기
50/59

풀이
투 포인터를 이용하여 풀었다.

  • 몸무게배열을 정렬한다.
  • 현재 가장 가벼운 사람 + 가장 무거운 사람 <= limit 이면 보트를 하나 추가한다. (그리고 가장 가벼운사람을 가리키는 포인터++, 무거운 사람을 가리키는 포인터--)
  • 만약 limit을 초과하면, 무거운 사람만 태우고 보트를 하나 추가한다. (그리고 무거운 사람을 가리키는 포인터--)
  • 만약 두 포인터가 같은 위치면, 한 사람만 남은 것이므로 보트를 하나 추가하고 break
  • 만약 두 포인터의 위치가 엇갈리면, 직전에 양 쪽사람을 함께 태우며 더이상 남은 사람이 없는 것이므로 break
import java.util.*;
class Solution {
    public int solution(int[] people, int limit) {
        int answer = 0;
        Arrays.sort(people);
        int p1 = 0;
        int p2= people.length-1;
        //p1+p2<=limit이면 p1++ p2--,answer++
        //p1+p2>limit면 p1++, answer++
        //if(p1==p2), answer++, break
        //if(p1>p2), break
        while(true){
            if(p1 == p2){
                answer++;
                break;
            }else if(p1>p2){
                break;
            }
            if(people[p1] + people[p2] <= limit){
                answer++;
                p1++;
                p2--;
            }else{
                answer++;
                p2--;
            }
        }
        return answer;
    }
}

* 주의할 점은 한 보트에 두 명씩 태운다는 것이다. 인원수 제한이 없는 줄 알고 풀이를 엄청 고민했는데, 알고보니 2명씩이어서 바로 쉽게 풀어버렸다.

profile
금융IT 개발자

0개의 댓글