본문 바로가기

알고리즘

투 포인터 알고리즘

728x90
  • 리스트에 순차적으로 접근해야 할 떄 두 개의 점의 위치를 기록하면서 처리하는 알고리즘
  • 리스트에 담긴 데이터를 순차적으로 접근해야 할 때는 시작점과 끝점 2개의 점으로 접근할 데이터의 범위를 표현할 수 있다.
let n = 8; // 데이터의 개수
let m=  5; // 찾고자 하는 부분합 
let data =[3,2,4,1,2,2,1,5] // 전체 수열

let cnt =0;
let intervalSum=0;
let end=0;

//start를 차례대로 증가시키며 반복
for(let start=0;start<n;start++){
  //end를 가능한만큼 아동시키기
  while(intervalSum<m && end<n){
    intervalSum=intervalSum+data[end];
    end++
  }
  //부분합이 m일 때 카운트 증가
  if(intervalSum===m) cnt++
  intervalSum=intervalSum-data[start];
}
console.log(cnt)
728x90