๐Ÿ”’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);