메모리

시간

1116 KB

0 ms

Code

#include <cstdio>

int main()
{
	int n,m;
	scanf("%d%d", &n, &m);
	int arr[n + 2] = {0,};
	int count = 0;
	int a;
	for (int  i = 0; i < n; i++)
	{
		scanf("%d", &a);
		arr[i] = a;
	}

	int start, end = 0;
	int val = arr[0];
	while (end != n)
	{
		if (val == m)
			count++;
		if(val < m)
			val += arr[++end];
		else
			val -= arr[start++];
	}
	printf("%d", count);
	return 0;
}

문제 풀이

투포인터 문제이다.

start와 end 두개의 변수로 수열의 인덱스를 가리킨다.

val은 start ~ end 까지의 arr 값을 저장한 것으로 m이 될 수 있는 경우의 수를 카운팅 한다.

val이 만약 m보다 작다면 end의 값을 한칸 늘려 더해주고

m보다 크다면 start의 해당 값을 빼준다.