-
백준 1806 부분합 - C++, 두포인터쾌락없는 책임 (공부)/알고리즘 문제풀이 2021. 7. 22. 19:07반응형
#include <iostream> #include <vector> #include <algorithm> using namespace std; int main(){ int n, s; cin >> n >> s; vector<int> num(n); for(int i = 0; i < n; i++) cin >> num[i]; int left = 0, right = 0, sum = num[0]; int ans = 999999999; while(right >= left && right < n){ if(sum == s){ ans = min(ans, right - left + 1); right++; sum += num[right]; } else if(sum > s){ ans = min(ans, right - left + 1); sum -= num[left]; left++; } else if(sum < s){ right++; sum += num[right]; } } if(ans == 999999999) cout << "0\n"; else cout << ans << '\n'; }
단순 두 포인터를 사용해서 범위를 좁혀갔습니다. 다만 양쪽에서 좁혀오는 방식이 아니라 왼쪽에서 늘려가는 방식이었습니다.
반응형'쾌락없는 책임 (공부) > 알고리즘 문제풀이' 카테고리의 다른 글
백준 20040 사이클 게임 - C++, Disjoint Set (0) 2021.08.19 백준 1563 개근상 - C++, DP, 재귀 (0) 2021.08.11 백준 1461 도서관 - C++, 그리디 알고리즘, 정렬 (0) 2021.07.21 백준 1197 최소 스패닝 트리 - C++, 크루스칼 알고리즘 (0) 2021.07.04 백준 1717 집합의 표현 - C++, Union find (0) 2021.06.29