반응형
문제
풀이
슬라이딩 포인터 (두 포인터)를 사용합니다.
소스 코드
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
41
|
#include <iostream>
#include <algorithm>
using namespace std;
int arr[100000];
int main()
{
int N, S;
cin >> N >> S;
for (int i = 0; i < N; i++) {
cin >> arr[i];
}
int right = 0;
int left = 0;
int sum = arr[0];
int minlength = 987654321;
while (1) {
// 범위 벗어나면 끝
if (left > right || right >= N) {
break;
}
// 합이 크면 왼쪽 최소길이 갱신하고 움직이기
if (sum >= S) {
int length = right - left + 1;
minlength = min(minlength, length);
sum -= arr[left];
left++;
}
// 합이 작으면 오른쪽 움직이기
else {
right++;
sum += arr[right];
}
}
// 조건 만족할 수 없으면 0
if (minlength == 987654321) {
minlength = 0;
}
cout << minlength;
return 0;
}
|
cs |
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[백준 17144] 미세먼지 안녕! C++ (0) | 2021.10.29 |
---|---|
[백준 1707] 이분 그래프 C++ (0) | 2021.10.26 |
[백준 3055] 탈출 C++ (0) | 2021.10.21 |
[백준 1197] 최소 스패닝 트리 C++ (0) | 2021.10.20 |
[백준 1520] 내리막 길 C++ (0) | 2021.10.17 |