BOJ 2805

const input = require("fs")
  .readFileSync("./input.txt")
  .toString()
  .trim()
  .split("\n");

const [N, height] = input.shift().split(" ").map(Number);
const tree = input[0]
  .split(" ")
  .map(Number)
  .sort((a, b) => a - b);

let start = 0;
let end = tree[tree.length - 1];
let answer = Number.MIN_SAFE_INTEGER;

while(start <= end) {
    let mid = Math.floor((start + end) / 2)
    let sum = 0;
    for(let x of tree) {
        if(x > mid) sum += x-mid;
    }

    if(sum >= height) {
        if(mid > answer) answer = mid;
        start = mid+1;
    } else {
        end = mid - 1;
    }
}
console.log(answer);

// binarySearch

감이 안와서 어떻게 접근해야할 지 모르겠다가. 이진탐색으로 푸는 문제라는걸 검색하고, 이진탐색의 알고리즘을 확인 후 풀 수 있었다.

좋은 웹페이지 즐겨찾기