til/Algorithm

연속부분수열

값진 2021. 7. 30. 18:21
import java.util.*;
class Main {	
	public int solution(int n, int m, int[] arr){
		int answer=0, sum=0, lt=0; //sum은 lt~rt합 
		for(int rt=0; rt<n; rt++){ //rt증가
			sum+=arr[rt]; //rt더하기
			if(sum==m) answer++; //같은지 확인,카운트
			while(sum>=m){//lt하나 뻬도 m보다 클 수 있으니 이때 계속빼줌
				sum-=arr[lt++];//lt가 가리키는값 빼고 증가
				if(sum==m) answer++; 
			}
		}
		return answer;
	}

	public static void main(String[] args){
		Main T = new Main();
		Scanner kb = new Scanner(System.in);
		int n=kb.nextInt();
		int m=kb.nextInt();
		int[] arr=new int[n];
		for(int i=0; i<n; i++){
			arr[i]=kb.nextInt();
		}
		System.out.print(T.solution(n, m, arr));
	}
}