반응형
투포인터 문제이다.
#접근방법
- start, end, sum 변수 생성
- start 포인터가 end 포인터 이하일 때 동안 while문을 반복
- 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
반응형
'백준 > 증가수열 & 투포인터' 카테고리의 다른 글
[백준 14719번 / C++] 빗물 (0) | 2022.03.10 |
---|---|
[백준 2631번 / C++] 줄세우기 (0) | 2022.03.07 |
[백준 2230번 / C++] 수 고르기 (0) | 2022.02.16 |
[백준 2003번 / C++ / 투포인터] 수들의 합2 (0) | 2022.02.16 |
[백준 1940번 / C++] 주몽 (0) | 2022.02.10 |
댓글