연속 부분수열1 (투포인터)

bkboy·2022년 5월 18일
0

문제

제한사항

입출력 예

풀이

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변수를 더해가며 뺴준다.
profile
음악하는 개발자

0개의 댓글