본문 바로가기

알고리즘/Lv. 2

프로그래머스 42885 구명보트 자바 풀이

728x90

난이도 : Lv. 2

풀이일 : 2501164

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr


문제


아이디어

  • people을 정렬한다.
  • 가장 가벼운 사람과 가장 무거운 사람을 짝지어 두 사람 무게의 합이 무게 제한을 넘어가는지 확인한다.
  • 무게 제한을 초과한다면, 무거운 사람은 혼자 타야한다. 현재 가벼운 사람과 다음 무거운 사람을 짝지어 비교하고 구명 보트 수를 한 개 더한다.
  • 무게 제한을 초과하지 않는다면, 현재 가벼운 사람과 현재 무거운 사람이 함께 보트를 탄다. 다음 가벼운 사람과 다음 무거운 사람 짝을 지어 비교할 수 있도록 준비한다.

코드

import java.util.Arrays;

class Solution {
    public int solution(int[] people, int limit) {
        int answer = 0;
        int front = 0, rear = people.length - 1;
        Arrays.sort(people);
        
        while (front <= rear) {
            if (people[front] + people[rear] <= limit) {
                front++;
            }
            rear--;
            answer++;
        }
        
        return answer;
    }
}
  • front, rear : 각각 가벼운 사람, 무거운 사람의 인덱스가 된다. 가장 가벼운 사람, 가장 무거운 사람부터 시작해 front는 하나씩 증가, rear는 하나씩 감소한다.
  • while : 사람이 홀수일 경우도 있으니 <= 조건을 사용한다.
    • front, rear가 가리키는 사람의 무게 합이 무게제한을 초과하지 않는다면, front + 1, rear - 1을 하고 보트를 하나 더한다.
    • 두 사람의 무게 합이 무게제한을 초과한다면, 무거운 사람이 혼자 보트를 타, rear - 1을 하고 보트를 하나 더한다.

제출 결과


느낀점

  • += 대신 ++ 쓰는게 어쩐지 더 좋아서 이런 문제는 자바가 파이썬보다 마음에 들어