📌 이분탐색
⭐️ 이분 탐색 대상: 모든 사람을 입국 심사하는 데 걸리는 시간
left = 0
, right = 최대 입국 심사 시간 * n
mid / 각 심사 시간
의 결과를 count answer
갱신하고 right
를 mid
이후 범위로 이동left
를 mid
이전 범위로 이동이분탐색 문제임을 파악하기가 어려웠음
시간 내애 심사할 수 있는 총 인원을 count 하기 위해 mid
를 심사시간으로 나눈 합을 구하는 방식을 도출하기 어려웠음
❗️ long long
형과 int
형을 계산할 때는, int
형을 long long
형과 연산하는 과정에서 int
범위를 넘어설 수 있기 때문에 int
형을 long long
형으로 변환해줘야 함
#include <iostream>
#include <vector>
using namespace std;
long long solution(int n, vector<int> times) {
long long answer = 0;
long long left=0,right=(long long)times.back()*n;
while(left<=right) {
long long mid=(left+right)/2;
long long cnt=0;
for(int i=0;i<times.size();i++) {
cnt+=(mid/(long long)times[i]);
}
if(cnt>=n) {
answer=mid;
right=mid-1;
}
else {
left=mid+1;
}
}
return answer;
}