이번에는 마구간의 갯수와 거리가 주어지고 말의 갯수가 주어진다. 이 말들을 모두 배치한다고 했을때 가장 서로의 거리가 멀게 배치하려면 얼마의 간격을 두고 배치해야하는가의 문제이다.
예를 들어서, 3마리의 말이 주어지고 마굿간은 [1, 2, 4, 8, 9]
의 간격으로 주어진다고 했을때 3의 간격으로 배치할때 가장 사이가 멀어지며 3마리의 말이 모두다 배치 가능하다.
접근 방법은 어떻게 해야할까?
function stable(horses, stable) {
stable.sort((a, b) => a - b);
let lt = 1;
let rt = stable[stable.length - 1];
let distance;
let answer;
let cnt = 1;
let lastHorsePos = 0;
function countHorse(distance) {
for (let i = 0; i < stable.length; i++) {
if (stable[i] - stable[lastHorsePos] >= distance) {
cnt++;
lastHorsePos = i;
}
}
lastHorsePos = 0;
}
while (lt <= rt) {
distance = parseInt((lt + rt) / 2);
countHorse(distance);
if (cnt >= horses) {
answer = distance;
lt = distance + 1;
} else {
rt = distance - 1;
}
cnt = 1;
}
return answer;
}
// 3 ,[1, 2, 8, 4, 9] // 3
// 3, [1, 5, 7, 8, 15, 19, 23, 26] // 11