https://school.programmers.co.kr/learn/courses/30/lessons/43236
import java.util.*;
class Solution {
public int solution(int distance, int[] rocks, int n) {
//돌 사이 간격을 기준으로 이분 탐색 진행
Arrays.sort(rocks);
int remain = rocks.length - n;
int lo = 1;
int hi = distance + 1;
while(lo + 1 < hi) {
int mid = (lo + hi) / 2;
//해당 최소 거리로 배치할 수 있는 돌 개수 카운팅
int cnt = 0;
int cur = 0;
for (int i = 0; i < rocks.length; i++) {
if (rocks[i] - cur >= mid) {
cnt++;
cur = rocks[i];
}
//마지막 돌일 경우
if (i == rocks.length - 1) {
if (distance - cur < mid)
cnt--;
}
}
if (cnt >= remain) lo = mid;
else hi = mid;
}
return lo;
}
}