-
#include<iostream> #include<cstdio> using namespace std; int n, m; int sum,ans; int main(){ scanf("%d %d", &n, &m); int *a = new int[n]; for(int i = 0; i < n;i++){ scanf("%d", &a[i]); } int left = 0; int right = 0; sum = a[0]; ans = 0; while(left <= right && right < n ) { if(sum < m){ right +=1; sum += a[right]; } else if(sum == m){ ans+=1; right+=1; sum += a[right]; } else if(sum > m){ sum -= a[left]; left++; if(left >right && left < n){ right = left; sum = a[left]; } } } printf("%d\n", ans); return 0; }
정말 오랜만에 동적배열 할당해본듯...
문제는 어렵지않았고, 투포인터 사용해서 풀이했다.
L, R에 따라 상황이다른데, 조건에따라, LEFT RIGHT가 움직이는것을 통해 풀이