공부혜옹

백준 2003번 수들의 합 2 본문

공부합시다/Algorithm

백준 2003번 수들의 합 2

Blair06 2021. 5. 18. 22:32

 

#include <iostream>



using namespace std;



#define MAX_N 10001



int n, m;
int a[MAX_N];
int ans;

int main()

{

    ios::sync_with_stdio(false);

    cin.tie(0); cout.tie(0);



    cin >> n >> m;



    for (int i = 0; i < n; i++)

    {

        cin >> a[i];

    }



    int left = 0, right = 0,now_Sum=a[0];



    while (left <= right && right < n)

    {

        // 현재 구간의 합이 m과 같을 경우

        // right += 1

        if (now_Sum == m)

        {

            ans += 1;

            right += 1;

            now_Sum += a[right];

        }

        // 현재 구간의 합이 m보다 클 경우

        else if (now_Sum > m)

        {

            now_Sum -= a[left];

            left += 1;



            // left가 right보다 커진 경우 바꿔준다

            if (left > right && left < n)

            {

                right = left;

                now_Sum = a[left];

            }

        }

        // 현재 구간의 합이 m보다 작을 경우

        else if (now_Sum < m)

        {

            right += 1;

            now_Sum += a[right];

        }

    }



    cout << ans << "\n";



    return 0;

}

반응형

'공부합시다 > Algorithm' 카테고리의 다른 글

백준 1786 찾기  (0) 2021.05.25
백준 1644번 소수의 연속합  (0) 2021.05.18
백준 1806번 부분합  (0) 2021.05.18
백준 9661번 돌게임 7  (0) 2021.05.11
백준 9660번 돌게임 6  (0) 2021.05.11
Comments