[백준] 수들의 합 2
Updated:
-
문제 링크 : 수들의 합 2
-
C++
투 포인터를 활용한 문제이다.
숫자의 합이 M보다 작을때는 e(end)포인터를 증가시킨다.
반대로 숫자의 합이 M보다 같거나 클 때는 s(start)포인터를 증가시킨다.
가장 중요한 종료조건은 e포인터가 배열의 끝에 도달했을 때 합이 M보다 작아야한다 는 것이다.
만약 M보다 같거나 크다면 s포인터를 움직여 경우의 수를 더 찾을 수 있기 때문이다.
#include <iostream>
using namespace std;
int N, M, sum, s, e, ans;
int arr[10000];
int main(void){
cin >> N >> M;
for(int i = 0; i<N; i++) cin >> arr[i];
while(1){
if(sum < M) sum += arr[e++];
else sum -= arr[s++];
if(sum < M && e == N) break;
if(sum == M) ans += 1;
}
cout << ans << "\n";
return 0;
}