컴퓨터공학/알고리즘 문제풀이
[프로그래머스 C++] 연속된 부분 수열의 합
Pyxis
2024. 9. 3. 16:35
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 42 43 44 45 | #include <string> #include <vector> #include <algorithm> #include <iostream> using namespace std; vector<int> solution(vector<int> sequence, int k) { vector<int> answer; // TODO : 정렬 기준 고려 vector<pair<int, int>> ret; int left = 0, right = 0, sum = sequence[left]; while (left < sequence.size()) { // k보다 작으면 right를 늘리고, k랑 같아도 right를 늘리고, k보다 크다면 left를 늘린다 if (sum < k) { if (right + 1 == sequence.size()) break; sum += sequence[++right]; } else if (sum == k) { ret.push_back({left, right}); if (right + 1 == sequence.size()) break; sum += sequence[++right]; } else if (sum > k) { sum -= sequence[left++]; } } ::sort(ret.begin(), ret.end(), [] (const pair<int, int>& A, const pair<int, int>& B) { if ((A.second - A.first) == (B.second - B.first)) return A.first < B.first; return (A.second - A.first) < (B.second - B.first); }); answer.push_back(ret.front().first); answer.push_back(ret.front().second); return answer; } | cs |