1806번 문제이다.
사진을 누르면 문제로 이동한다.
문제는 C++언어로 구현하였다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n, s;
cin >> n >> s;
vector<int> arr(n);
for (int i = 0; i < n; i++) // 배열 입력
cin >> arr[i];
int start = 0, end = 0, sum = 0, minLen = 0x7FFFFFF;
while (start <= end) {
if (sum >= s) { // 현재 포인터의 합이 s보다 크거나 같으면 start ++
minLen = min(minLen, end - start); // 가장 짧은 길이만 저장
sum -= arr[start++];
}
else if (end == n) break;
else sum += arr[end++]; // end++ 함으로써 sum 증가
}
if (minLen == 0x7FFFFFF) cout << 0 << endl; // 불가능 하면 0 출력
else cout << minLen << endl;
return 0;
}
'Algorithm' 카테고리의 다른 글
[BAEKJOON] 1074번: Z (0) | 2021.09.27 |
---|---|
[BAEKJOON] 2018번: 수들의 합 5 (0) | 2021.09.26 |
[BAEKJOON] 2750번: 수 정렬하기 (0) | 2021.09.21 |
[BAEKJOON] 10814번: 나이순 정렬 (0) | 2021.09.21 |
[BAEKJOON] 16199번: 나이 계산하기 (0) | 2021.09.21 |