๐Algorithm
๋ฐฑ์ค[node.js] > 2805๋ฒ ๋๋ฌด ์๋ฅด๊ธฐ
devWarrior
2024. 12. 21. 17:33
๋ฌธ์ ๋งํฌ
https://www.acmicpc.net/problem/2805
๋ฌธ์ ํ์ด
๋ฌธ์ ์กฐ๊ฑด์ ๋ณด๊ณ ์ด๋ถํ์์ด๋ผ๋ ๋๋์ ๋ฐ์๋ค. ( ์๋์กฐ๊ฑด ์ฐธ๊ณ )
๋ง์ฝ ์ด๋ถํ์์ ํ์ง ์๊ณ ๋๋ฌด ๋์ด๋ฅผ ํ๋์ฉ ๋ฎ์ถ๋ฉด์ ์ต๋๊ฐ์ ๊ตฌํ๋ ค๋ฉด ๊ดด๋ํ ์ฐ์ฐํ์๊ฐ ๋์จ๋ค.
ํ์ง๋ง ์ด๋ถํ์์ผ๋ก ํ์ํ๋ฉด ๊ณ์ฐํ์๋ฅผ ํ๊ธฐ์ ์ผ๋ก ๋ง์ด ์ค์ผ ์ ์๋ค. ์ด๋ ๊ฒ ํ๊ธฐ์ ์ผ๋ก ์ค์ด๋๋ ์ด์ ๋ ๋๋ฌด ๋์ด์ ๋ฒ์๊ฐ ๋๋ฌด ํฌ๊ธฐ ๋๋ฌธ์ด๋ค. -> ์ด๋ถ๋ถ์ ์ง์ ์ผ์ด์ค๋ฅผ ์ฐ์ ํด์ ํ ์คํธํด๋ณด๋ฉด ์ ์ ์๋ค. )
let fs = require("fs");
let input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
let [N, M] = input[0].split(" ").map((n) => Number(n));
let line = input[1].split(" ").map((n) => Number(n));
let max = Math.max(...line);
let [left, right] = [0, max];
let mid = Math.floor((left + right) / 2);
while (left !== mid) {
let treeLength = 0;
line.forEach((height) => {
if (height > mid) {
treeLength = treeLength + height - mid;
}
});
if (treeLength >= M) {
left = mid;
mid = Math.floor((left + right) / 2);
} else {
right = mid;
mid = Math.floor((left + right) / 2);
}
}
console.log(mid);