2019/11/30 - [알고리즘 일기] - 2003번: 수들의 합 2
2003번: 수들의 합 2
이중 for 문으로 풀기 #include #include using namespace std; int main() { int n, m; cin >> n >> m; vector a(n); for (int i = 0; i < n; i++) { cin >> a[i]; } int ans = 0; for (i..
hackerjacob.tistory.com
의 맨 마지막 코드랑 비슷하게 풀면된다.
#include<iostream>
#include<vector>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n, s;
cin >> n >> s;
vector<int> a(n);
for (int i = 0; i < n; i++) {
cin >> a[i];
}
int R = 0;
int L = 0;
long long sum = a[0];
int ans = 0;
while (L <= R && R < n) {
if (sum < s) { // 목표보다 작으면 R증가
R++;
if (R >= n) break;
sum += a[R];
}
else if (sum == s) { // 같으면 R증가, ans 저장
if (ans == 0 || ans > R - L + 1) {
ans = R - L + 1;
}
R++;
if (R >= n) break;
sum += a[R];
}
else if (sum > s) { // 클경우 L 증가
if (ans == 0 || ans > R - L + 1) {
ans = R - L + 1;
}
sum -= a[L];
L++;
if (L > R) { // L이 R 보다 커질 경우 같이 증가
R = L;
sum = a[L];
}
}
}
cout << ans << '\n';
return 0;
}
'알고리즘 일기' 카테고리의 다른 글
1208번 : 부분수열의 합2 (0) | 2019.11.30 |
---|---|
1644번 : 소수의 연속합 (0) | 2019.11.30 |
2003번: 수들의 합 2 (0) | 2019.11.30 |
프로그래머스 : 종이접기 DP (0) | 2019.11.30 |
12100번 : 2048(easy) 비트마스크 (0) | 2019.11.29 |
댓글