문제
제한사항
입출력 예
풀이
function solution(m, arr) {
let answer = 0;
let start = (end = 0);
let sum = 0;
while (start < arr.length && end < arr.length) {
sum += arr[end++];
if (sum === m) {
answer++;
}
while (sum >= m) {
sum -= arr[start++];
if (sum === m) {
answer++;
}
}
}
return answer;
}
let a = [1, 2, 1, 3, 1, 1, 1, 2];
console.log(solution(6, a));
- 연속의 합을 구하는데도 투포인터 알고리즘을 사용하기 좋다.
- start, end라는 포인터로 사용할 변수를 둔다. 처음에 sum을 0으로 초기화하고 end변수를 더해가면서 원소를 sum에 누적한다. 그러다 주어진 합 여기선 6과 같아지면 카운트해준다. 6을 넘어가면 start변수를 더해가며 뺴준다.