본문 바로가기
백준

백준 1806 부분합

by 콩순이냉장고 2021. 2. 15.

문제 URL : www.acmicpc.net/problem/1806

 

1806번: 부분합

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

www.acmicpc.net

문제 접근법 : 투포인터를 이용한 알고리즘문제인데

배열 v에 입력된수를 차례로 sum이라는 변수에 더해준후 S이상이 되는 지 확인합니다.

S이상이되면 더 더길이가 더길어지기때문에 더 탐색할 필요없이 앞에서 더했던것을 하나하나씩 제거하면서 S보다 작아지면 다시 다음위치부터 sum에 값을 더해주면서 S이상이되는지 반복해서 탐색하면 됩니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
//By 콩순이냉장고
#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;
long long n, s;
vector<long long> v;
int minlen = 1e+9;
 
void input() {
    cin >> n >> s;
    v.resize(n);
    for (int i = 0; i < n; i++)
        cin >> v[i];
}
 
void solve() {
 
    long long sum = 0;
    int j = 0;
    for (int i = 0; i < n; i++) {
        int len = i - j + 1;
        sum += v[i];
        while (sum >= s) {
            minlen=min(minlen, len);
            sum -= v[j++];
            len = i - j + 1;
        }
    }
    cout << (minlen==1e+9?0:minlen) << "\n";
}
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    input();
    solve();
 
}
cs

 



 

지적할 점이 있거나 궁금한점 혹은 모르는점 혹은 다른아이디어 언제든

댓글은 환영입니다.

 

'백준' 카테고리의 다른 글

백준 16235 나무 재테크  (0) 2021.02.15
백준 16920 확장 게임  (0) 2021.02.15
백준 20057 마법사 상어와 토네이도  (0) 2021.02.10
백준 3190 뱀  (0) 2021.02.10
백준 1525 퍼즐  (0) 2021.01.01