문제

  • 링크
    title: "코딩테스트 연습 - 연속된 부분 수열의 합"
    image: "https://image.freepik.com/free-vector/landing-page-template-for-a-website_23-2147782747.jpg"
    description: "비내림차순으로 정렬된 수열이 주어질 때, 다음 조건을 만족하는 부분 수열을 찾으려고 합니다."
    url: "https://school.programmers.co.kr/learn/courses/30/lessons/178870"
    

문제 풀이

문제 접근

  1. 투 포인터 기법 사용left와 right 포인터를 사용하여 연속된 부분 수열을 효율적으로 탐색
  2. 합계 계산 최적화: 매번 큐의 합을 계산하는 대신, sum 변수를 사용하여 현재 부분 수열의 합을 유지
  3. 최소 길이 부분 수열 찾기minLength 변수를 사용하여 조건을 만족하는 가장 짧은 부분 수열 찾기
  4. 결과 저장: 조건을 만족하는 부분 수열을 찾을 때마다 answer 배열 업데이트

    간단한 수도 코드 정리

    Type/Paste Your Code
    

풀이 코드

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

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

            while (sum >= k) {
                if (sum == k && right - left + 1 < minLength) {
                    minLength = right - left + 1;
                    answer[0] = left;
                    answer[1] = right;
                }
                sum -= sequence[left];
                left++;
            }
            right++;
        }

        return answer;
    }
}