[백준] 1806. 부분합

최대 1 분 소요

문제 링크

[백준] 1806. 부분합


풀이 과정

투 포인터 문제입니다.

문제 [백준] 2003. 수들의 합 2의 풀이 아이디어를 사용했으며, 투 포인터가 가리키는 범위 내의 누적 합이 S 이상이면 그 길이를 갱신하도록 했습니다.


코드

const fs = require("fs");
const stdin = (process.platform === "linux"
    ? fs.readFileSync("/dev/stdin")
    : `10 15
5 1 3 5 10 7 4 9 2 8`
)
    .toString()
    .trim()
    .split("\n");
const input = (() => {
    let line = 0;
    return () => stdin[line++];
})();

const [N, S] = input().split(" ").map(Number);
const arr = input().split(" ").map(Number);
let left = 0,
    right = 0,
    sum = 0,
    answer = 100001;

while (right <= N) {
    if (sum <= S) sum += arr[right++];
    else sum -= arr[left++];

    if (sum >= S) {
        answer = Math.min(answer, right - left);
    }
}

console.log(answer == 100001 ? 0 : answer);

카테고리:

업데이트:

댓글남기기