백준알고리즘

수들의 합 2

먼지의삶 2019. 8. 26. 00:38
#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가 움직이는것을 통해 풀이