프로그래머스 - 연속된 부분 수열의 합(java)

Wuchang·2023년 8월 2일
0

코딩테스트

목록 보기
13/13

https://school.programmers.co.kr/learn/courses/30/lessons/178870

투포인터 알고리즘 활용해 풀 수 있는 문제.

class Solution {
    public int[] solution(int[] sequence, int k) {
        int[] answer = new int[2];
        answer[0] = Integer.MAX_VALUE;
        answer[1] = Integer.MAX_VALUE;
        int length = sequence.length;
        int left = 0;
        int right = 0;
        int sum = 0;

        for (right = 0; right < sequence.length; right++) {
            sum += sequence[right];

            while (sum > k) {
                sum -= sequence[left];
                left++;
            }

            if (sum == k) {
                if (length > right - left) {
                    answer[0] = left;
                    answer[1] = right;
                    length = right - left;
                } else if (length == right - left) {
                    answer[0] = Math.min(answer[0], left);
                    answer[1] = Math.min(answer[1], right);
                }
            }
        }
        return answer;
    }
}
profile
우창의 개발일지🐈

1개의 댓글

comment-user-thumbnail
2023년 8월 2일

정리가 잘 된 글이네요. 도움이 됐습니다.

답글 달기