주어진 데이터의 값을 보고 이분탐색을 풀어야 된다라고 감은 왔다. 근데 막상 이분탐색으로 어떻게 푸는지 잘 몰랐다.
문제를 이코테 떡복이 떡 자르기 문제와 매우매우 똑같다.
풀이 방법 자체는 이분탐색의 경우 특별하게 꼬지 않는 이상 비슷한 풀이 메커니즘을 가지고 있는 것 같다.
떡복이 떡 만들기 링크를 걸어놓겠다.
https://velog.io/@jaegeunsong_1997/%EC%9D%B4%EC%A7%84%ED%83%90%EC%83%89-%EB%96%A1%EB%B3%B5%EC%9D%B4-%EB%96%A1-%EB%A7%8C%EB%93%A4%EA%B8%B0
import java.util.*;
class Solution {
public long solution(int n, int[] times) { // 6, [7, 10]
long answer = 0;
Arrays.sort(times);
long left = 0;
long right = (long) n * times[times.length - 1]; // 가장 오래걸리는 시간(배열의 마지막)
while (left <= right) {
long mid = (left + right) / 2;
long sum = 0; // 총 심사한 인원
for (int i = 0; i < times.length; i++) {
sum += mid / times[i]; // 이 부분이 이해가 안되면 예시로 계산을 해봐라
}
// 해야할 인원(n)보다 심사인원이 적은 경우 -> mid를 right쪽으로 옮긴다.
if (sum < n) left = mid + 1;
else { // 해야할 인원(n)보다 심사인원이 많은 경우 -> mid를 left쪽으로 옮긴다.
right = mid - 1;
answer = mid; // 최대한 적을 경우 정답이므로 끝
}
}