1. 문제

 

2. 접근법

배열 구간에서 특정 값이 나올 경우의 수를 구하는 문제이므로 투포인터 문제이다.

A 배열에 1 1 1 1값들을 저장한 후

Start_Pointer와 End_Pointer를 만들고

 

1. 현재 값이 M 값보다 같거나 클 경우 Start_Pointer를 뺀 후 증가시킨다.

2. End_Pointer가 배열의 끝에 도달할 경우 종료

3. 현재 값이 M 값보다 작거나 같을 경우 End_Pointer를 더한 후 증가 시킨다.

4. 현재 값이 M 값과 같을 경우 count ++를 해준다. 

 

 

 

3. 코드

package week08;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Baek2003 {
    public static void main(String[] args) throws IOException {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer stringTokenizer = new StringTokenizer(bufferedReader.readLine());

        int N = Integer.parseInt(stringTokenizer.nextToken());
        int M = Integer.parseInt(stringTokenizer.nextToken());

        stringTokenizer = new StringTokenizer(bufferedReader.readLine());

        int[] A = new int[N];

        for(int i=0; i<N; i++){
            A[i] = Integer.parseInt(stringTokenizer.nextToken());
        }

        int count = 0;
        int sum = 0;
        int start_pointer = 0;
        int end_pointer = 0;

        while(true){
            if(sum >= M){
                sum -= A[start_pointer++];
            }else if(end_pointer == N){
                break;
            }else{
                sum += A[end_pointer++];
            }

            if(sum == M){
                count++;
            }
        }

        System.out.println(count);
    }
}