입력 : 첫째 줄 - 기존 랜선의 개수와 K 필요한 랜선의 개수 N (1 ≤ K ≤ 10,000, 1 ≤ n ≤ 1,000,000, K ≤ N)
K줄 - 기존 랜선의 길이 (랜선의 길이 ≤ 2^31-1)
출력 : N개를 만들 수 있는 랜선의 최대 길이
O(N log N)
이진 탐색
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int K = sc.nextInt();
int N = sc.nextInt();
int[] cables = new int[K];
long max = 0;
for (int i = 0; i < K; i++) {
cables[i] = sc.nextInt();
if (cables[i] > max) {
max = cables[i];
}
}
// 이진 탐색
long left = 1;
long right = max;
long mid;
long result = 0;
while (left <= right) {
mid = (left + right) / 2;
long count = 0;
for (int cable : cables) {
count += cable / mid;
}
if (count >= N) {
result = mid;
left = mid + 1;
} else {
right = mid - 1;
}
}
System.out.println(result);
}
}