연속된 부분 수열의 합

유승선 ·2024년 2월 11일
0

프로그래머스

목록 보기
44/48

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;
}
profile
성장하는 사람

0개의 댓글