[백준알고리즘] 알고리즘 연습 - 2343

krkorklo·2022년 3월 4일
0

백준알고리즘

목록 보기
24/27

2343 - 기타레슨

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

let fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString().split('\n');

let n = Number(input[0].split(" ")[1]);
let numbers = input[1].split(" ").map((num) => Number(num));

function answer(input) {
    let left = 1;
    let right = input.reduce((acc, val) => acc + val, 0);
    let ans = 0;
    while(left <= right) {
        let mid = Math.floor((left+right)/2);
        let cnt = 1;
        let sum = 0;
        for(let i=0; i<input.length; i++) {
            if (sum + input[i] <= mid) sum += input[i];
            else {
                cnt++;
                if (input[i] > mid) {
                    left = mid+1;
                    cnt = Infinity;
                    break;
                } else {
                    sum = input[i];
                }
            }
        }
        if (cnt <= n) {
            ans = mid;
            right = mid-1;
        } else {
            left = mid+1;
        }
    }
    return ans;
}

console.log(answer(numbers));

0개의 댓글