https://www.acmicpc.net/problem/1654
let input = require('fs')
.readFileSync(process.platform === 'linux' ? '/dev/stdin' : './input.txt')
.toString()
.trim()
.split('\n');
let [K, N] = input.shift().split(' ').map(Number);
input = input.map(Number).sort((a, b) => a - b);
let start = 0;
let end = input[K - 1];
let answer = Number.MIN_SAFE_INTEGER;
while(start <= end){
let mid = Math.floor((start + end) / 2);
let lineNum = input.reduce((acc, cur) => acc + Math.floor(cur / mid), 0);
if(lineNum >= N){
if(mid >= answer){
answer = mid;
}
start = mid + 1;
}
else {
end = mid - 1;
}
}
console.log(answer);
이진 탐색을 이용해서 풀면 된다.
가장 긴 길이의 전선을 end로 두고 N의 값과 비교하여 최대의 전선 길이를 찾으면 된다.
'코딩테스트 연습 > Sort' 카테고리의 다른 글
[백준] 10816번 숫자 카드2(JavaScript) (0) | 2024.05.06 |
---|---|
[백준] 10815번 숫자 카드(JavaScript) (0) | 2024.05.04 |
[백준] 1764번 듣보잡(JavaScript) (0) | 2024.05.03 |