투 포인터를 활용하여 푼다. 값을 더해나가면서 M보다 크면 바로 종료하는 식으로 진행한다.
(M에 마이너스가 올 수 없고, N의 범위가 10,000이라 가능)
투포인터를 구현한다.
//백준 2003, 수들의 합 2
#include <iostream>
int main (){
int N, M;
int nums[10'000];
std::cin >> N >> M;
for(int i{0}; i<N; ++i){
std::cin >> nums[i];
}
int ans{0};
for(int i{0}; i<N; ++i){
int j{i}; int sum{0};
if(nums[i] == M){
++ans;
continue;
}
while(j<N){
if(sum + nums[j] == M){
++ans;
break;
}
else if(sum + nums[j] > M) break;
else{
sum += nums[j];
++j;
}
}
}
std::cout << ans;
return 0;
}