백준 1654번 랜선 자르기 Node.js 풀이

버건디·2024년 1월 28일
0

백준

목록 보기
72/75
post-thumbnail

문제 링크


- 풀이

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

const [K, N] = input.shift().split(" ").map(Number);

const arr = input.map(Number).sort((a, b) => a - b);

let start = 1;

let end = arr[arr.length - 1];

let answer = 0;

while (start <= end) {
  const mid = Math.floor((start + end) / 2);

  let sum = 0;

  for (let x of arr) {
    sum += Math.floor(x / mid);
  }

  // 만든 랜선의 합이 더 짧다면 랜선을 더 많이 만들어야한다.
  // 즉 중간값을 줄여주어서, 해당 sum이 더 많이 나오도록 해야한다.
  if (N > sum) {
    end = mid - 1;
  } else {
    answer = mid;
    start = mid + 1;
  }
}

console.log(answer);

주석 설명에 대한 부분이 헷갈렸었다.

만들어진 랜선의 총 갯수가 조건보다 적다면, 랜선을 더 많이 만들어야하는것이다.

그렇다면 이 랜선의 갯수를 더 늘려주어야 하므로 end 부분을 줄여주어서 mid 값이 더 줄어들도록 해야한다.

그게 아니라면, start에 mid + 1을 해주어서 랜선 갯수를 맞춰주어야한다.

profile
https://brgndy.me/ 로 옮기는 중입니다 :)

0개의 댓글