백준 19939번 node.js
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
let [n, k] = input[0].split(" ").map(Number);
let result = 0;
let sum = 0;
//1부터 바구니k까지의 합
for (let i = 1; i <= k; i += 1) {
sum += i;
}
//합이 n보다 작은 경우 2번 조건 안됨
if (sum > n) result = -1;
//공의 개수가 충분
else {
n -= sum;
if (n % k === 0) result = k - 1;
else result = k;
}
console.log(result);
바구니에 1개 이상의 공이 들어가야 하고, 개수가 달라야합니다.
공을 최대한 연속적으로 되게 담습니다.
n이 15이고, k가 5라면 1,2,3,4,5
n이 16이고, k가 5라면 1,2,3,4,6
n이 17이고, k가 5라면 1,2,3,5,6 으로 담아야 가장 많이 담긴 바구니와 적게 담긴 바구니의 개수를 최소로 할 수 있습니다.
그렇다면 정답은 항상 k이거나 k-1이 됩니다.
k가 5일때, n이 15보다 작다면 각 바구니의 공의 개수가 달라질 수 없게 되므로 조건을 만족하지 않습니다. 따라서 n이 조건에 도달할 수 있는 최솟값은 1+2+...+k 입니다.