알고리즘
백준_2003_수들의 합2
shj718
2022. 5. 26. 17:28
✨문제: https://www.acmicpc.net/problem/2003
2003번: 수들의 합 2
첫째 줄에 N(1 ≤ N ≤ 10,000), M(1 ≤ M ≤ 300,000,000)이 주어진다. 다음 줄에는 A[1], A[2], …, A[N]이 공백으로 분리되어 주어진다. 각각의 A[x]는 30,000을 넘지 않는 자연수이다.
www.acmicpc.net
✨알고리즘: 브루트포스-기타-투 포인터(Two Pointer)
✨중요 포인트: 문제조건이 '자연수'여서 이렇게 풀 수 있음.
✨코드:
#include <iostream>
#include <vector>
using namespace std;
int main() {
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int n, m;
cin >> n >> m;
vector<int> a(n);
for (int i = 0; i < n; i++) {
cin >> a[i];
}
int left = 0;
int right = 0;
int sum = a[0];
int ans = 0;
while (left <= right && right < n) {
if (sum < m) {
right++;
sum += a[right];
}
else if (sum == m) {
ans++;
right++;
sum += a[right];
}
else if (sum > m) {
sum -= a[left];
left++;
if (left > right && left < n) {
right = left;
sum = a[left];
}
}
}
cout << ans << '\n';
return 0;
}