코딩 테스트/프로그래머스

프로그래머스 - 입국 심사 문제 (자바)

 

programmers.co.kr/learn/courses/30/lessons/43238

 

코딩테스트 연습 - 입국심사

n명이 입국심사를 위해 줄을 서서 기다리고 있습니다. 각 입국심사대에 있는 심사관마다 심사하는데 걸리는 시간은 다릅니다. 처음에 모든 심사대는 비어있습니다. 한 심사대에서는 동시에 한

programmers.co.kr

이진탐색을 통해서 구함

end = 가장 늦게 처리하는 심사대에 모든 인원이 심사 받는 경우(최대 경우)

mid(심사 걸리는 최소 시간)값을 구하고 해당 시간에 최대로 처리되는 심사인원 수가 n보다 크거나 같으면 

mid를 줄이고 아니면 mid를 늘리면서 탐색

import java.util.*;

// 프로그래머스 입국심사 문제
class Solution {
    public long solution(int n, int[] times) {
        Arrays.sort(times);
        long start = 0;
        long end = (long) times[times.length - 1] * n;
        long answer = end;
        long sum;

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

            // 각 심사관이 처리하는 입국자 수
            for(int time : times) {
                sum += mid / time;
            }

            // 처리 가능한 입국자 수가 더 많으므로 시간을 줄임
            if(sum >= n) {
                answer = Math.min(answer, mid);
                end = mid - 1;
            }else {
                start = mid + 1;
            }
        }
        return answer;
    }
}