메모리
시간
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;
}
C++
복사
문제 풀이
투포인터 문제이다.
start와 end 두개의 변수로 수열의 인덱스를 가리킨다.
val은 start ~ end 까지의 arr 값을 저장한 것으로 m이 될 수 있는 경우의 수를 카운팅 한다.
val이 만약 m보다 작다면 end의 값을 한칸 늘려 더해주고
m보다 크다면 start의 해당 값을 빼준다.