[boj] 2805. 나무 자르기 (node.js)

호이·2022년 2월 10일
0

algorithm

목록 보기
19/77
post-thumbnail

문제 요약

BOJ 2805 나무 자르기

풀이

  • 이분탐색 알고리즘을 구현한다.
  • 이때 L, R을 한 칸씩 이동하기 위한 내부 조건으로 해당(mid)부터 나무를 잘랐을 때 원하는 값보다 크거나 같으면 1, 작으면 0을 반환하는 bool 함수를 활용한다.

내 풀이

const readline = require("readline");
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

let cnt = 0;
const input = () => stdin[cnt++];

let stdin = [];
rl.on("line", function (line) {
  stdin.push(line);
}).on("close", function () {
  const [N, M] = input().split(" ").map(Number);
  const arr = input().split(" ").map(Number);
  arr.sort((a, b) => a - b);
  binarySearch(0, 2000000000);

  function binarySearch(L, R) {
    let result = R;
    while (L <= R) {
      let mid = Math.trunc((L + R) / 2);
      if (sumTreeLen(mid)) {
        result = mid;
        L = mid + 1;
      } else {
        R = mid - 1;
      }
    }
    console.log(result);
  }

  function sumTreeLen(start) {
    let sum = 0;
    arr.forEach((elem) => {
      if (elem > start) sum += elem - start;
    });
    return sum >= M;
  }
});
  • L, R에 초기값을 줄 때 R에 최대 나무의 요구 길이인 2000000000을 주어야 한다.
profile
매일 부활하는 개복치

0개의 댓글