컴퓨터공학/알고리즘 문제풀이

[프로그래머스 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<intint>> 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<intint>& A, const pair<intint>& 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