https://www.acmicpc.net/problem/16401
로직
- 이분탐색 활용
- 과자를 사용하지 않아도 됨 => 최대값(end)을 과자 최소 크기로 설정하면 안됨
- 생각해보니 end값을
Math.max(...arr)
해서 (big O = N)의 연산으로 end값을 줄이고 시작하는게 좋겠다는 생각이 들어 수정
- 생각해보니 end값을
// logic
const solution = (M,N,arr)=>{
const check = (M,value,arr)=>{
let cnt = 0;
for (const len of arr){
cnt += Math.floor((len)/value);
if (cnt>=M) return true;
}
return false;
}
arr.sort((a,b)=>b-a)
let [s,e] = [0,Math.max(...arr)];
let ans = 0;
while (s<=e) {
const mid = Math.floor((s+e)/2);
if (check(M,mid,arr)) {
ans = mid;
s = mid+1;
} else e = mid-1;
}
return ans;
}
// IO
let M,N,arr;
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.on('line',(line)=>{
M===undefined? [M,N] = line.split(' ').map(Number): arr = line.split(' ').map(Number);
if (arr !== undefined) rl.close();
});
rl.on('close',()=>{
const ans = solution(M,N,arr);
console.log(ans);
});
후기
- 몫을 구하기 위해서 Math.floor를 쓰는게 익숙하지 않다
- 전에는 반복문 종료 조건에 대해 안떠올랐다. 오랜만에 문제를 풀며 원리를 생각하니 자연스럽게 떠올랐다.
'알고리즘 문제 풀이 > Javascript' 카테고리의 다른 글
[node.js] 백준 1449 수리공 항승 (0) | 2025.02.11 |
---|---|
[node.js] 백준 8979 올림픽 (0) | 2025.02.03 |
[node.js] 백준 13023 ABCDE (0) | 2025.01.22 |
[node.js] 백준 1309 동물원 (1) | 2025.01.17 |
[node.js] 1347 미로만들기 (0) | 2025.01.15 |