https://www.acmicpc.net/problem/2003
문제
N개의 수로 된 수열 A[1], A[2], …, A[N] 이 있다. 이 수열의 i번째 수부터 j번째 수까지의 합 A[i] + A[i+1] + … + A[j-1] + A[j]가 M이 되는 경우의 수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 N(1 ≤ N ≤ 10,000), M(1 ≤ M ≤ 300,000,000)이 주어진다. 다음 줄에는 A[1], A[2], …, A[N]이 공백으로 분리되어 주어진다. 각각의 A[x]는 30,000을 넘지 않는 자연수이다.
출력
첫째 줄에 경우의 수를 출력한다.
작성한 코드
let fs = require("fs");
let input = fs.readFileSync("/dev/stdin").toString().split("\n");
const [n, m] = input[0].split(" ").map(Number);
const arr = input[1].split(" ").map(Number);
let cnt = 0; // 경우의 수
for (let start = 0; start < n; start += 1) {
let end = start; // 끝점은 시작점과 동일하게 시작
let accumulate = 0;
while (end < n) {
accumulate += arr[end];
// 합이 m을 넘은 경우
if (accumulate > m) break;
// 합이 m이 되었을 때
if (accumulate === m) {
cnt += 1; // 카운트 증가
break;
}
end += 1; // 끝점 한 칸 증가
}
}
console.log(cnt);
풀이