https://www.acmicpc.net/problem/2003
N개의 수로 된 수열 A[1], A[2], …, A[N] 이 있다. 이 수열의 i번째 수부터 j번째 수까지의 합 A[i] + A[i+1] + … + A[j-1] + A[j]가 M이 되는 경우의 수를 구하는 프로그램을 작성하시오.
제출 23325 정답 비율 50%
#include <stdio.h>
int main(void) {
int N = 0, M = 0;
scanf("%d %d", &N, &M);
int* A = malloc(N * sizeof(int));
for (int i = 0; i < N; i++) {
scanf("%d", &A[i]);
}
int cnt = 0, sum = 0;
int left = 0, right = 0;
while (1) {
if (right > N)
break;
else if (sum >= M) {
sum -= A[left];
left++;
}
else if (sum < M) {
right++;
sum += A[right];
}
if (sum == M)
cnt++;
}
printf("%d", cnt);
}