알고리즘/BOJ

백준 1806번 부분합

꾸준함. 2019. 1. 27. 17:02

문제 링크입니다: https://www.acmicpc.net/problem/1806


백준 2003번 수들의 합 2(https://jaimemin.tistory.com/1104)와 같이 투 포인터 알고리즘을 적용하면 되는 문제였습니다.


#include <iostream>

#include <algorithm>

using namespace std;

 

const int MAX = 100000;

const int INF = 987654321;

 

int arr[MAX];

 

int main(void)

{

        ios_base::sync_with_stdio(0);

        cin.tie(0);

        int N, S;

        cin >> N >> S;

 

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

                 cin >> arr[i];

 

        int low = 0, high = 0;

        int sum = arr[0];

        int result = INF;

        //투 포인터 알고리즘 적용

        while (low <= high && high < N)

        {

                 if (sum < S)

                         sum += arr[++high];

                 else if (sum == S)

                 {

                         result = min(result, (high - low + 1));

                         sum += arr[++high];

                 }

                 else if (sum > S)

                 {

                         result = min(result, (high - low + 1));

                         sum -= arr[low++];

                 }

        }

       

        if (result == INF)

                 cout << 0 << "\n";

        else

                 cout << result << "\n";

        return 0;

}


개발환경:Visual Studio 2017


지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

반응형

'알고리즘 > BOJ' 카테고리의 다른 글

백준 1208번 부분집합의 합 2  (6) 2019.01.27
백준 1644번 소수의 연속합  (0) 2019.01.27
백준 2003번 수들의 합 2  (0) 2019.01.27
백준 9576번 책 나눠주기  (0) 2019.01.27
백준 2831번 댄스 파티  (0) 2019.01.26