import java.util.*;
class Main {
public int solution(int n,int m, int[] arr) {
int answer = 0 ;
int sum = 0;
int start = 0;
for(int end = 0; end<n; end++) {
sum += arr[end];
if(sum == m) {answer++;}
while(sum >= m) {
sum -= arr[start++];
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[] arr = new int[n];
int m = kb.nextInt();
for (int i = 0; i < n; i++) {
arr[i] = kb.nextInt();
}
System.out.pr**텍스트**intln(T.solution(n, m, arr));
}
}
1 2 1 3 1 1 1 2 이 담긴 1차원 배열에서 m=6일때, 연속으로 더해 m값이 되면 카운팅을 한다.
처음엔 while문 안에 for문을 넣어서 풀어보려했지만 잘 되지 않았다.
풀이방법은 우선 start와 end를 정해줘서 start가 end를 쫓아가는 과정이다.
for문의 int 변수를 end로 하고 처음 sum값에
arr[end] = 즉, 첫번째 값을 넣었다.
첫번째 sum 값 또한, m 일수도 있으므로 체크를 해줘야 한다.
sum = m 이면 카운팅,
m보다 적다면 다음 for문,
m보다 크다면 while문을 거치게 된다.
while문은 sum이 m보다 크거나 같을때 거치게 되는데,
while문 안에서는 end값이 고정되고 sum값이 m보다 작아질때까지 arr[start]를 빼주면 start가 end를 쫓아간다.
이 과정에서 sum = m 이 발생한다면 카운팅을 해준다.
for문 안에 while문을 적용시켜서 start값이 end값을 쫓아가게 만드는것이 핵심인것같다!