백준/증가수열 & 투포인터

[백준 1806번 / C++] 부분합

배발자 2022. 3. 2.

목차

    반응형

    투포인터 문제이다. 

     

    #접근방법 

    1. start, end, sum 변수 생성 
    2. start 포인터가 end 포인터 이하일 때 동안 while문을 반복 
    3. sum값이 s값보다 이상이면 현재 길이의 최솟값 갱신

    sum값이 s값보다 이상일 때 start 포인터 증가 ( sum 값 감소) 

    sum값이 s값보다 미만일 때 end 포인터 증가 ( sum 값 증가) 

    
      
    #include <iostream>
    #include <vector>
    #include <algorithm>
    using namespace std;
    int main() {
    int n, s;
    cin >> n >> s;
    vector <int> v;
    for (int i = 0; i < n; i++) {
    int a; cin >> a;
    v.push_back(a);
    }
    int start = 0;
    int end = 0;
    int sum = 0;
    int result = 1000000;
    while (start <= end) {
    if (sum >= s) {
    result = min(result, end - start);
    sum -= v[start++];
    }
    else if (end == n)break;
    else sum += v[end++];
    }
    if (result == 1000000)cout << 0;
    else cout << result;
    }

     

     

    1806번: 부분합

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

    www.acmicpc.net

    [백준 1806번 / C++] 부분합

    반응형

    댓글