프로그래머스 입국심사 (Java,자바)

jonghyukLee·2022년 7월 7일
0

이번에 풀어본 문제는
프로그래머스 입국심사 입니다.

📕 문제 링크

❗️코드

import java.util.*;

class Solution {
    public long solution(int n, int[] times) {
        long answer = 0;

        Arrays.sort(times);
        long start = 1;
        long end = (long)n * times[times.length - 1];

        while(start <= end) {
            long mid = (start + end) / 2;
            long sum = 0;

            for (int time : times) {
                sum += (mid / time);
            }

            if (sum >= n) {
                end = mid - 1;
                answer = mid;
            }
            else {
                start = mid + 1;
            }
        }
        return answer;
    }
}

📝 풀이

n명의 인원에 대한 입국심사를 진행한다고 할 때, times배열의 원소들은 각 심사관들이 한 명을 심사하는데 걸리는 시간을 나타냅니다. n명을 모두 심사하는데 필요한 최소비용을 구하는 문제입니다.
먼저 times 배열을 정렬하고, 최선 / 최악의 경우의 수를 start / end로 초기화 시켜줍니다.
mid 값이 입국심사를 모두 끝내기 위한 기준 시간이 되며, n값과 비교했을 때 더 크다면 기준 시간이 너무 큰 것이므로 end값을 줄이고, 반대로 작았을 때는 start값을 올려 결괏값을 이분탐색을 통해 구할 수 있습니다.

📜 후기

이분탐색을 진행할 기준 값을 선정하지 못해 조금 접근이 어려웠던 문제입니다.
다른 블로그를 조금 참고했지만, 완벽하게 이해할 수 있었어서 다음에 다시 풀어봐야할 것 같아요!

profile
머무르지 않기!

0개의 댓글