연속부분수열


:raising_hand: 알고리즘 공부 간 기록이 필요한 문제들에 대한 정리를 기록하는 포스트 입니다.


1. 문제 요건


N 개의 원소를 갖는 배열에서 연속된 수의 합이 6이 되는 경우 구하기

2. 코드


function solution(arr, m) {
    let lt = sum = 0
    let n = arr.length
    let cnt = 0
    for(let rt=0; rt < n; rt++) {
        sum += arr[rt]
        if(sum === m) {
            cnt++
        }
        while(sum >= m) {
            sum -= arr[lt++]
            if(sum === m) {
                cnt++
            }
        }
    }
    return cnt
}

3. 결과정리


투포인터 알고리즘이점은 중복 for 문으로 n2 의 시간복잡도보다 줄일 수 있다는 점이다.

이 알고리즘으로 풀때 중요한 부분각각의 포인터를 어떤 기준으로 잡는지와 빠져나가는 조건을 잘 잡는 것이다.

위 문제에서도 rt, lt 의 조건과 반복문을 빠져나가는데 있어서 끝나는 조건을 잡는것이 중요하다.