본문 바로가기
코딩테스트 연습/Sort

[백준] 1654번 랜선 자르기(JavaScript)

by eddypark 2024. 5. 7.

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의 값과 비교하여 최대의 전선 길이를 찾으면 된다.