특정 합 M이 첫줄에 주어지고, 두번째 줄에 배열이 주어질 때 특정 합을 만족하는 연속부분집합의 개수를 구하는 방법

입력

5
1 2 3 2 5 

출력

3

투포인터 알고리즘

포인터 start 와 end를 지정하여, sum값을 누적해가며 end를 증가시킨다.(while sum<target) → 이후, target==sum을 비교하여 만족하면 count누적

for문 마지막마다 sum - arr[start]적용

코드

import java.util.*;
public class testcode {
  public static void main(String[] args) {
    solution(new int[] {1,2,3,2,5});
  }
  public static void solution(int[] arr){
    int end = 0;
    int sum = 0;
    int target = 5;
    int count = 0;
    for(int start = 0; start<arr.length;start++){
      while(sum<target && end<arr.length){
        sum = sum + arr[end];
        end++;
      }
      if(sum==target){
        count++;
      }
      sum = sum-arr[start];
    }
    System.out.println(count);
  }
}