알고리즘
파라메트릭 서치 (BOJ 1477)
E재HO
2023. 8. 13. 23:19
import java.io.*;
import java.util.*;
public class Main {
static int L,R;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
R= Integer.parseInt(st.nextToken());
int [] arr = new int[N+2];
arr[0]=0;
arr[N+1]=R;
st = new StringTokenizer(br.readLine());
for(int i=1; i<=N; i++){
arr[i]= Integer.parseInt(st.nextToken());
}
Arrays.sort(arr);
System.out.println(binarySearch(arr, N, M));
}
private static int binarySearch(int[]arr, int N, int M){
int left = 1;
int right = R-1;
while(left<=right){
int mid =(left+right)/2;
int cnt = 0;
for(int i =1; i<N+2; i++) cnt+= (arr[i]-arr[i-1] -1)/mid;
if(cnt>M) left = mid+1;
else right = mid -1;
}
return left;
}
}