백준1806 - 부분합 (두 포인터) node.js 본문
반응형
https://www.acmicpc.net/problem/1806
해당 문제는 연속된 수들의 부분합 중에 그 합이 S 이상이 되는 것 중 가장 짧은 것의 길이를 구하는 문제다.
문제 풀이 방식
부분 합을 구하기 위해서 두 포인터를 활용하여 문제를 해결하였다. 부분합의 길이는, 인덱스로 삼고 있는 right와 left의 차라는 것만 기억하면 풀이는 그리 어렵지 않다.
const fs = require("fs");
const input = fs
.readFileSync(process.platform === "linux" ? "/dev/stdin" : "입력.txt")
.toString()
.trim()
.split("\n");
function solution(data) {
const [[N, M], arr] = data.map((el) => el.split(" ").map(Number));
let [left, right, sum] = [0, 0, 0];
const result = [];
while (right <= N) {
if (sum >= M) {
result.push(right - left);
sum -= arr[left];
left++;
} else {
sum += arr[right];
right++;
}
}
console.log(result.length ? Math.min(...result) : 0);
}
solution(input);
반응형
'개발 > algorithm' 카테고리의 다른 글
백준14584 - 암호 해독 node.js (0) | 2024.02.02 |
---|---|
백준5014 - 스타트링크 (BFS) node.js (0) | 2024.01.31 |
백준1312 - 소수 (부동소수점) node.js (0) | 2024.01.27 |
백준1948 - 임계경로 (위상정렬 & 백트래킹) node.js (0) | 2024.01.25 |
백준2252 - 줄 세우기 (위상정렬) node.js (1) | 2024.01.23 |
Comments