Algorithm & Data Structures/Programers

Lv 2. 연속된 부분수열의 합

Geisha 2024. 8. 4. 21:53

 

코드 흐름

  • 투포인터 알고리즘을 사용하였다.
  • left, right 를 지정하는 변수를 두고 right를 while 문을 통해서 계속 늘려가면서 sum 이 k를 넘어갈때까지 더한다.
  • 이후 left를 더하고 sum에서 left칸의 sequence 원소를 빼면서 sum과 k를 비교한다.
  • 문제조건에 맞게 부분수열의 길이가 짧다면 최신화한다.
class Solution {
    public int[] solution(int[] sequence, int k) {
        
        int N = sequence.length;
        int left=0, right = N-1;
        int sum = 0;
        for(int i = 0, j = 0 ; i < N ; i++){
            while(j < N && sum < k){
                sum+= sequence[j];
                j++;
            }
            if(sum == k){
                if((right-left)>(j-i))
                {
                    left = i;
                    right = j-1;
                }
            }
            sum -= sequence[i];
        }
        int[] answer = {left,right};
        return answer;
    }
}