May 18, 2021 ( last updated : May 18, 2021 )
투 포인터
알고리즘
https://github.com/sneakstarberry/
[백준] 1806번 부분합
low, high 두 수를 통해서 배열 상에서 더해주는 값들의 시작 점과 끝 지점을 표현해 준다. 하나씩 이동하면서 배열 내의 값들을 더하거나 빼면서 경우의 수를 카운트 해준다.
#include <algorithm>
#include <cstring>
#include <iostream>
#define MAX 100000 + 1
#define INF (1 << 31) - 1
using namespace std;
int N, S, ARR[MAX];
int main() {
cin >> N >> S;
memset(ARR, 0, sizeof(ARR));
for (int i = 0; i < N; i++) {
cin >> ARR[i];
}
int low = 0, high = 0;
int sum = ARR[0];
int result = INF;
while (low <= high && high < N) {
if (sum < S) {
sum += ARR[++high];
} else if (sum == S) {
result = min(result, high - low + 1);
sum += ARR[++high];
} else if (sum > S) {
result = min(result, high - low + 1);
sum -= ARR[low++];
}
}
if (result == INF) {
cout << 0;
} else {
cout << result;
}
return 0;
}
Originally published May 18, 2021
Latest update May 18, 2021
Related posts :