728x90
문제
https://www.acmicpc.net/problem/2003
풀이
투포인터의 기본 문제이며, 주어지는 수열에서 연속된 수들의 합이 M이 되면 카운트를 올리는 문제이다.
이 문제에서 while 문을 이용해 반복해주는 부분이 있는데, 이 while 문의 조건에 원래는 lp <= rp 가 들어갔지만 rp가 수열의 길이보다 커진경우 원활한 순환이 되지 않는다.
코드
const input = require('fs')
.readFileSync(process.platform === 'linux' ? '/dev/stdin' : __dirname + '/example.txt')
.toString().trim().split('\n');
const [n, m] = input.shift().split(' ').map(Number);
const arr = input[0].split(' ').map(Number);
let lp = 0;
let rp = 0;
let answer = 0;
while (lp < n && rp < n) {
let sum = 0;
for (let i = 0; i <= rp - lp; i++){
sum += arr[lp + i];
}
if (sum === m) answer += 1;
if (sum <= m) {
if (rp < arr.length - 1) rp++;
else {
lp++;
}
}
else {
lp++;
}
}
console.log(answer);
728x90