1. 문제
2. 코드
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = sc.nextInt();
}
int p1 = 0;
int p2 = 0;
int sum = 0;
int cnt = 0;
while (p2<n) {
if (sum > m || p1 == n) {
sum -= arr[p2++];
} else {
sum += arr[p1++];
}
if (sum == m) {
cnt++;
}
}
System.out.println(cnt);
}
}
3. 풀이
- 투 포인터에서, p1 / p2 = 0 으로 시작한다.
- 구간 합(sum)이 M을 초과하거나, p1이 배열의 범위를 넘으면 p1을 오른쪽 한칸 이동을 해준다
- 구간 합(sum)이 M과 같거나 이하일때, end가 배열의 범위를 넘지 않을 때, p1을 오른쪽 한칸 이동 해준다.
- 만약 구간합(sum)이 M과 같다면 결과(count)를 증가시켜준다.
4. 링크
https://www.acmicpc.net/problem/2003