const fs = require("fs");
const input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
const [K, N] = input.shift().split(" ").map(Number);
const arr = input.map(Number).sort((a, b) => a - b);
let start = 1;
let end = arr[arr.length - 1];
let answer = 0;
while (start <= end) {
const mid = Math.floor((start + end) / 2);
let sum = 0;
for (let x of arr) {
sum += Math.floor(x / mid);
}
// 만든 랜선의 합이 더 짧다면 랜선을 더 많이 만들어야한다.
// 즉 중간값을 줄여주어서, 해당 sum이 더 많이 나오도록 해야한다.
if (N > sum) {
end = mid - 1;
} else {
answer = mid;
start = mid + 1;
}
}
console.log(answer);
주석 설명에 대한 부분이 헷갈렸었다.
만들어진 랜선의 총 갯수가 조건보다 적다면, 랜선을 더 많이 만들어야하는것이다.
그렇다면 이 랜선의 갯수를 더 늘려주어야 하므로 end 부분을 줄여주어서 mid 값이 더 줄어들도록 해야한다.
그게 아니라면, start에 mid + 1을 해주어서 랜선 갯수를 맞춰주어야한다.