[프로그래머스] 연속된 부분 수열의 합 java

Bong2·2024년 4월 29일
0

알고리즘

목록 보기
6/63

문제 연속된 부분 수열의 합

** 비내림차순 : 오름차순으로 정렬이 되어 있는 상태이지만 같은 값이 들어있을 수 있다

문제접근

투포인터 알고리즘을 사용하여 풀었다.
1. 시작과 끝의 지점을 똑같은 인덱스로 표시한다.
2. 합친 값 즉 sum이 목표 값인 k보다 낮으면 끝의 지점을 +1을 하여 더해준다.
3. 합친 값이 목표 값보다 큰 경우에는 시작 지점을 +1을 더해주고 처음에 넣어준 값을 빼준다.

import java.util.*;

class Solution {
    public int[] solution(int[] sequence, int k) {
        int[] answer = new int[2];
        
        int left = 0, right = 0;
        int sum = 0;
        int len = -1;
        
        while(left < sequence.length)
        {
            while(right < sequence.length && sum < k)
            {
                sum += sequence[right++];
            }
            
            if(sum == k)
            {
                if(len == -1 || len > right - left)
                {
                    answer[0] = left;
                    answer[1] = right-1;
                    len = right - left;
                }
                
            }
            sum -= sequence[left++];
            
        }
    
        return answer;
    }
}
profile
자바 백엔드 개발자로 성장하자

0개의 댓글