23년 8월 10일 [알고리즘 - 그리디]

sua·2023년 8월 10일
0

알고리즘 가보자고

목록 보기
73/101

인프런 침몰하는 타이타닉

문제

나의 풀이

import java.util.Arrays;

public class Titanic {
    public static int solution(int[] nums, int m) {
        int answer = 0;
        Arrays.sort(nums); // 무게 기준으로 오름차순 정렬
        int left = 0; // 가장 가벼운 사람
        int right = nums.length - 1; // 가장 무거운 사람
        while(left <= right) { // 같아지는 순간도 넣어야함(1명만 남은 경우가 있기 때문에)
            if(nums[left] + nums[right] <= m) { // 가장 무거운 사람과 가벼운 사람의 합이 m 이하일 때
                answer++; // 보트의 개수 1 증가
                left++;
                right--;
            } else { // m 보다 클 때
                answer++; // 보트의 개수 1 증가
                right--; // 무거운 사람만 태워보냈으므로
            }
        }
        return answer;
    }

    public static void main(String[] args) {
        System.out.println(Titanic.solution(new int[]{90, 50, 70, 100, 60}, 140));
        System.out.println(Titanic.solution(new int[]{10, 20, 30, 40, 50, 60, 70, 80, 90}, 100));
    }
}

정렬을 한 다음에 left는 0번째부터 right는 마지막부터 탐색을 해서 가장 가벼운 사람과 가장 무거운 사람의 합이 m 이하인지 확인한다. 이때 m이하이면 같이 타고 나가면 되므로 보트의 개수를 1 증가시킨다. 만약 m 보다 큰 경우 right이 가리키는 한명만 타고나가야 한다 보트의 개수를 1 증가시키고 right 인덱스를 1 감소시킨다. 이렇게 반복하다가 right과 left가 엇갈리는 순간에 멈추고 보트의 개수를 return하면 된다.

결과

profile
가보자고

0개의 댓글