티스토리 뷰

백준

백준 소스코드 [C++] 1806 부분합

Hani_Levenshtein 2021. 2. 14. 03:43

www.acmicpc.net/problem/1806

 

1806번: 부분합

첫째 줄에 N (10 ≤ N < 100,000)과 S (0 < S ≤ 100,000,000)가 주어진다. 둘째 줄에는 수열이 주어진다. 수열의 각 원소는 공백으로 구분되어져 있으며, 10,000이하의 자연수이다.

www.acmicpc.net

백준 소스코드 [C++] 1806 부분합

#include <iostream>
#include <algorithm>
#include <queue>
#include <string.h>
#include <limits.h>
#include <vector>
#include <math.h>
#include <stack>
#include <bitset>
#include <string>
#include <set>
#define all(v) v.begin(), v.end()
#define pii pair<int,int>
#define make_unique(v) v.erase(unique(v.begin(), v.end()), v.end())
typedef long long ll;
using namespace std;

int n,m;
vector<int> arr;
int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    cin>>n>>m;
    arr.resize(n);
    for(int i=0;i<n;i++) cin>>arr[i];

    int L=0,R=0,length=INT_MAX;
    int sum=0;
    while(R<=n && L<=n){
        if(sum<m) sum+=arr[R++];
        else sum-=arr[L++];
        if(m<=sum) length=min(length,R-L);
    }
    if(length==INT_MAX) cout<<"0";
    else cout<<length;
    return 0;
}
댓글