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