문제 링크
https://www.acmicpc.net/problem/2512
풀이
const solve = (input, N, M) => {
input.sort((a, b) => a - b);
let high = input[N-1];
let low = 1;
while (low <= high) {
const mid = Math.floor((low + high) / 2);
const sum = input.reduce((acc, v) => acc + (v <= mid ? v : mid), 0);
if (sum <= M) low = mid + 1;
else high = mid - 1;
}
console.log(high);
};
const [N, ...input] = require('fs').readFileSync('/dev/stdin').toString().trim().split(/\s+/).map(v => +v);
const M = input.pop();
solve(input, N, M);
배정되는 예산은 1(예산의 최솟값)과 최대 요청 금액 사이의 정수이다.
따라서, 1과 요청 금액들 중에서의 최대 금액 사이에서 이진 탐색을 통해 총 예산을 넘지 않는 최대 예산을 구할 수 있다.
'연습장 > 백준(BOJ) 문제풀이' 카테고리의 다른 글
[백준 4963] 섬의 개수 with Node.js (0) | 2021.08.16 |
---|---|
[백준 15655] N과 M (6) with Node.js (0) | 2021.08.16 |
[백준 9613] GCD 합 with Node.js (0) | 2021.08.13 |
[백준 15654] N과 M (5) with Node.js (0) | 2021.08.12 |
[백준 2667] 단지번호붙이기 with Node.js (0) | 2021.08.09 |