N개의 수로 이루어진 수열, 이 수열에서 연속부분수열의 합이 특정숫자 M이하가 되는 경우가 몇 번 있는지 구하기.
예를들어 N=5, M=5이고 수열이 1 3 1 2 3 라면,
합이 5이하가 되는 연속부분수열은 {1}, {3}, {1}, {2}, {3}, {1, 3}, {3, 1}, {1, 2}, {2, 3}, {1, 3, 1}로 총 10가지
풀이
function solution(m, arr) {
let answer = 0;
let sum = 0;
let lt = 0;
for (let rt = 0; rt < arr.length; rt++) {
sum += arr[rt];
while (sum > m) {
sum -= arr[lt++];
}
answer += rt - lt + 1;
}
return answer;
}
let a = [1, 3, 1, 2, 3];
console.log(solution(5, a));
'코딩테스트 문제풀이 > inflearn' 카테고리의 다른 글
[인프런] Node.js / 섹션5-효율성(해시 알고리즘) / 6. 학급 회장 (0) | 2023.02.08 |
---|---|
[인프런] Node.js / 섹션5-효율성(슬라이싱 윈도우 알고리즘) / 5. 최대 매출 (0) | 2023.02.08 |
[인프런] Node.js / 섹션5-효율성(투포인터 알고리즘) / 3. 연속 부분수열 1 (0) | 2023.02.08 |
[인프런] Node.js / 섹션5-효율성(투포인터 알고리즘) / 2. 공통원소 구하기 (1) | 2023.01.28 |
[인프런] Node.js / 섹션5-효율성(투포인터 알고리즘) / 1. 두 배열 합치기 (1) | 2023.01.28 |