[프로그래머스] - 입국 심사

BinaryHyeok·2023년 10월 24일
0

Algorithm

목록 보기
11/25

입국 심사

Solution

입국 심사를 받는 데 걸리는 최솟값을 구하는 문제이다.
n명이 가장 빠른 심사관에게만 검사를 받는다면 걸리는 시간은 n times[0]이며, 이 값이 모든 사람이 심사를 받는데 걸리는 시간의 최솟값의 최대범위이다.
따라서 정답은 1 <= answer <= n
times[0] 내에 존재하며 양 끝의 값으로 이분 탐색을 하여 최솟값을 구하였다.

Code

import java.util.*;

class Solution {

    public long solution(int n, int[] times) {
        int[] a = times;
        long hi = times[0] * (long)n;
        return binarySearch(1, hi, n, a);
        
    }
    
    public long binarySearch(long lo, long hi, int n, int[] times){
       
        while(lo < hi){
            long mid = (lo + hi) / 2;
            
            long personCnt = 0;
            for(int time : times){
                personCnt += mid / time;
            }
            
            if(personCnt >= n){
                hi = mid;
            }
            else{
                lo = mid + 1;
            }
        }

        return hi;
    }
}

0개의 댓글