연속부분수열
알고리즘 공부 간 기록이 필요한 문제들에 대한 정리를 기록하는 포스트 입니다.
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 의 조건과 반복문을 빠져나가는데 있어서 끝나는 조건을 잡는것이 중요하다.