티스토리 뷰

https://www.acmicpc.net/problem/6236

 

6236번: 용돈 관리

현우는 용돈을 효율적으로 활용하기 위해 계획을 짜기로 하였다. 현우는 앞으로 N일 동안 자신이 사용할 금액을 계산하였고, 돈을 펑펑 쓰지 않기 위해 정확히 M번만 통장에서 돈을 빼서 쓰기로

www.acmicpc.net

이진탐색

 

2343 기타레슨이랑 똑같은 문제? 그냥 변수명만 바꿨는데 맞았음

const fs = require('fs');
const input = fs.readFileSync("./dev/stdin").toString().trim().split("\n")
const [N, M] = input.shift().split(' ').map(Number);
const money = input.map(Number);

let min = Math.min(...money);
let max = money.reduce((r, v) => r + v, 0);
let answer = Infinity;

while (min <= max) {
  let updateMin = 0;
  mid = Math.floor((min + max) / 2);
  let temp = mid;
  let cnt = 0;
  for (let i = 0; i < N; i++) {
    if (temp - money[i] >= 0) {
      temp -= money[i];
    } else {
      cnt++;
      temp = mid - money[i];
      if (temp < 0) {
        updateMin = money[i];
        break;
      }
    }
  }

  if (updateMin > 0) {
    min = updateMin;
    continue;
  }

  if (temp < mid) cnt++;

  if (cnt <= M) {
    if (answer > mid) {
      answer = mid
    }
    max = mid - 1;
  } else {
    min = mid + 1;
  }
}

console.log(answer)
728x90
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함