정화 코딩

[C++] 부분합 (백준 1806번) 본문

PS

[C++] 부분합 (백준 1806번)

jungh150c 2024. 9. 15. 02:18

https://www.acmicpc.net/problem/1806

 

#include <iostream>
#include <vector>
using namespace std;

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    int n, s;
    cin >> n >> s;
    vector<int> a(n);
    for (int i = 0; i < n; i++) cin >> a[i];

    int si = 0;
    int ei = 1;
    int sumt = a[0];
    int ans = 200000;
    int cnt = 1;
    while (ei <= n) {
        if (sumt < s) {
            sumt += a[ei];
            ei++;
            cnt++;
        } else {
            ans = min(ans, cnt);
            sumt -= a[si];
            si++;
            cnt--;
        }
    }

    if (ans == 200000) cout << 0 << '\n';
    else cout << ans << '\n';
}

보자마자 투 포인터로 풀어야겠다고 생각했다. 그래서 현재까지의 합이 s보다 작으면 뒤로 한칸 옮겨 하나 더 더하고, 현재까지의 합이 s보다 크거나 같으면 앞으로 한칸 옮겨 하나를 빼도록 구현했다. (AC)

 

'PS' 카테고리의 다른 글

[C++] 구슬 탈출 2 (백준 13460번)  (0) 2024.09.19
[C++] 이번학기 평점은 몇점?  (0) 2024.09.16
[C++] 파티 (백준 1238번)  (0) 2024.09.15
[C++] Four Squares (백준 17626번)  (0) 2024.09.12
[C++] 대회 장소 준비 (백준 9555번)  (0) 2024.09.09
Comments