Search
Duplicate
🙆🏻‍♀️

수들의 합 2

주차
15
문제번호
2003
언어
티어
실버
유형
투 포인터
nj_Blog
nj_상태
이해도
풀이
사람
이해도 2
13 more properties

메모리

시간

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의 해당 값을 빼준다.