🔗 문제 링크
https://www.acmicpc.net/problem/1806
✏️ 풀이
const [[N, S], arr] = require('fs')
.readFileSync('/dev/stdin')
.toString()
.trim()
.split('\n')
.map(v => v.split(' ').map(Number));
let sum = 0;
let minLength = Infinity;
let i = 0;
let j = 0;
while (j < N) {
sum += arr[j];
while (sum >= S) {
sum -= arr[i];
minLength = Math.min(minLength, j - i + 1);
i++;
}
j++;
}
console.log(minLength === Infinity ? 0 : minLength);
투 포인터를 사용하여 해결하였다.
부분합의 시작점을 i, 끝을 j라고 할 때, 반복문을 통해 j를 증가시키면서 arr[j]를 sum에 누적한다. sum이 S 이상일 때 sum이 S 미만이 될 때까지 i를 증가시키면서 sum이 S 이상일 때의 길이(minLength)를 갱신한다. 반복문이 끝난 후에 minLength가 갱신된 적이 없다면 0을, 그 외에는 minLength를 반환하면 된다.
'연습장 > 백준(BOJ) 문제풀이' 카테고리의 다른 글
[백준 1991 - Node.js] 트리 순회 (0) | 2023.01.12 |
---|---|
[백준 1644 - Node.js] 소수의 연속합 (0) | 2023.01.12 |
[백준 15565 - Node.js] 귀여운 라이언 (0) | 2023.01.11 |
[백준 20922 - Node.js] 겹치는 건 싫어 (0) | 2023.01.10 |
[백준 2531 - Node.js] 회전 초밥 (1) | 2023.01.09 |