Source: https://koi.or.kr/koi/2022/1/
function solution(input) {
const data = input.trim();
const nums = data.split(/\\s+/).map(Number);
let idx = 0;
const N = nums[idx++]; // 묶음 수
const K = nums[idx++]; // 묶음당 빵 개수
const P = nums[idx++]; // 크림 없는 빵 허용 한도(미만)
let sellable = 0;
for (let i = 0; i < N; i++) {
let noCream = 0;
for (let j = 0; j < K; j++) {
if (nums[idx++] === 0) noCream++;
}
if (noCream < P) sellable++;
}
return sellable;
}
function solution(input) {
const [P, M, K] = input.split(' ').map(Number);
if (K <= 10 && P * K <= M) {
console.log("YES");
} else {
console.log("NO");
}
}
function solution(input) {
// 1. 모든 데이터를 숫자 배열로 평탄화(Flatten)
const nums = input.trim().split(/\\s+/).map(Number);
let idx = 0;
// 2. 포인터(idx++)를 사용하여 데이터 추출
const n = nums[idx++];
const A = [];
for (let i = 0; i < n; i++) {
A.push(nums[idx++]);
}
// 3. 문제 로직 수행
// S[0]: 짝수 누적 개수, S[1]: 홀수 누적 개수
let S = [0, 0];
// ans[0], ans[1]: 각 상태별 조건 만족 횟수
let ans = [0, 0];
for (let i = 0; i < n; i++) {
// 현재 숫자의 홀짝 여부 (음수 대응을 위해 Math.abs 사용)
let x = Math.abs(A[i]) % 2;
S[x] += 1;
// 상대방(1-x)의 누적 개수를 현재 답에 더함
ans[x] += S[1 - x];
}
// 4. 결과값 중 최솟값 반환
return Math.min(...ans);
}
function solution(input) {
const data = input.trim().split(/\\s+/).map(Number);
let idx = 0;
const N = data[idx++];
// A = [0] + list(map(int, input().split()))
const A = [0];
for (let i = 0; i < N; i++) {
A.push(data[idx++]);
}
// D = [0 for _ in range(N+1)]
const D = Array(N + 1).fill(0);
for (let i = 1; i <= N; i++) {
let r = D[i - 1];
let x = A[i];
for (let j = i - 1; j >= 1; j--) {
x = A[j] - x;
if (x < 0) break;
if (x === 0 && r <= D[j - 1]) {
r = D[j - 1] + 1;
}
}
D[i] = r;
}
return String(N - D[N]);
}
function solution(input) {
const data = input.trim().split(/\\s+/).map(Number);
let idx = 0;
const n = data[idx++];
let l = data[idx++];
let r = data[idx++];
const a = new Array(n);
for (let i = 0; i < n; i++) a[i] = data[idx++];
for (let i = 0; i < n; i++) a[i] -= l;
for (let i = 1; i < n; i++) a[i] += a[i - 1];
r -= l;
if (a[n - 1] < 0 || a[n - 1] > r * n) {
return '-1';
}
const INF = 1e15;
const maxSum = r * n;
const dp = Array.from({ length: n }, () => Array(maxSum + 1).fill(INF));
for (let v = 0; v <= r; v++) {
dp[0][v] = Math.abs(a[0] - v);
for (let i = 1; i < n; i++) {
const upper = v * (i + 1);
for (let j = v; j <= upper; j++) {
const ndp = dp[i - 1][j - v] + Math.abs(a[i] - j);
if (ndp < dp[i][j]) dp[i][j] = ndp;
}
}
}
return String(dp[n - 1][a[n - 1]]);
}