Subsequence 안에서 가장 길이가 짧으면서도 K랑 값이 같은 부분 수열을 찾으면 되는 문제다.
사실 그렇게 복잡한건 없고 two pointer 을 사용하면 되는 문제다.
sequence 의 길이는 10^6, 일반적인 2중 루프로는 안되는 길이다. 그래서 투포인터 방법을 사용했는데 이상하게 테스트 케이스를 통과 못해서 확인해보니 if 조건문 안에 정확하게 currentSum == k 를 해줘야 했다.
다음부터는 조금 더 정확히 적어줘야겠다.
#include <string>
#include <vector>
#include <bits/stdc++.h>
using namespace std;
vector<int> solution(vector<int> sequence, int k) {
vector<int> answer;
int currLength = INT_MAX;
int start = 0, end = 0, currSum = 0;
while(end < sequence.size()){
currSum += sequence[end];
while(currSum >= k){
if(currSum == k && end - start + 1 < currLength){
currLength = end - start + 1;
answer = {start, end};
}
currSum -= sequence[start++];
}
end++;
}
return answer;
}