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

JIWOO YUN·2023년 4월 25일
0

문제링크

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

구현방법

첫 값부터 시작해서 연속적인 값들의 합을 구하면 된다.

그리고 원하는 값이랑 같을경우 그 값의 시작 인덱스와 끝 인덱스의 차이만큼과 그전의 차이와 비교해서 차이가 그전의 차이보다 작은 경우 갱신

2중으로 돌경우 시간초과가 발생이 가능 -> 투포인터 알고리즘을 통해서 진행하였습니다.

구현알고리즘

투 포인터 알고리즘

CODE

class Solution {
    public int[] solution(int[] sequence, int k) {

        int answer[] = new int[2];

        int length = sequence.length;

        //
        int start = 0;
        int end = 0;
        //둘의 인덱스 차이
        int diff = Integer.MAX_VALUE;
        int sum_check = 0;

        while (start < length) {
            //end가 끝에 도달했을경우
            if (end == length) {
                sum_check -= sequence[start++];
                if (sum_check == k) {
                    if(diff > end - start +1){
                        answer[0] = start;
                        answer[1] = end-1;
                        diff = end - start +1;
                    }
                }

                continue;
            }
            //중간지점 계산
            if (sum_check <= k) {
                sum_check += sequence[end++];
            } else if (sum_check > k) {
                sum_check -= sequence[start++];
            }

            //sum_check 가 k와 같은경우
            if (sum_check == k) {
                if(diff > end - start +1){
                    answer[0] = start;
                    answer[1] = end-1;
                    diff = end - start +1;
                }
            }
        }



        return answer;
    }
}
profile
열심히하자

0개의 댓글