N개의 수로 이루어진 수열, 이 수열에서 연속부분수열의 합이 특정숫자 M이 되는 경우가 몇 번 있는지 구하기.
예를들어 N=8, M=6이고 수열이 1 2 1 3 1 1 1 2 라면,
합이 6이 되는 연속부분수열은 {2, 1, 3}, {1, 3, 1, 1}, {3, 1, 1, 1}로 총 3가지
풀이
function solution(m, arr) {
let p1 = 0;
let p2 = 0;
let count = 0;
let subtotal = arr[p2];
while (p1 < arr.length && p2 < arr.length) {
if (subtotal < m) {
subtotal += arr[++p2];
} else {
subtotal -= arr[p1++];
}
if (subtotal === m) {
count++;
}
}
return count;
}
let a = [1, 2, 1, 3, 1, 1, 1, 2];
console.log(solution(8, a));
투포인터가 아직 익숙치 않아서 시각적으로 확인하고자 그림을 그려보면서 접근했다.
'코딩테스트 문제풀이 > inflearn' 카테고리의 다른 글
[인프런] Node.js / 섹션5-효율성(슬라이싱 윈도우 알고리즘) / 5. 최대 매출 (0) | 2023.02.08 |
---|---|
[인프런] Node.js / 섹션5-효율성(투포인터 알고리즘) / 4. 연속 부분수열 2 (0) | 2023.02.08 |
[인프런] Node.js / 섹션5-효율성(투포인터 알고리즘) / 2. 공통원소 구하기 (1) | 2023.01.28 |
[인프런] Node.js / 섹션5-효율성(투포인터 알고리즘) / 1. 두 배열 합치기 (1) | 2023.01.28 |
[인프런] Node.js / 섹션4 - 완전탐색(브루트포스) / 5. K번째 큰 수 (0) | 2023.01.25 |