[개념] 슬라이딩윈도우

쭈·2022년 7월 20일

보통 슬라이딩 윈도우와 투포인터 두 개념이 같이 언급되는 것 같다. 슬라이딩 윈도우부터 정리한 후에 투포인터 공부해야지!

슬라이딩 윈도우 개념

말그대로 하나의 창을 만든 후 해당 창 길이만큼 배열에서 쓱쓱 밀고가는 것이다.

아주 간단한 예제를 통해 코드를 봐볼까?

N개의 숫자가 담긴 배열 nums가 있다. 연속된 K만큼의 합 중에서 최댓값을 구하라

  1. 창 (윈도우) 생성하기

    이 때, 첫 번째 창의 합 (12+15+11 = 38)을 저장해둔다.
  1. 한 칸 씩 옆으로 슬라이딩하기

    한 칸 밀었으므로 20만큼 더하고, 12만큼 뺀다.
    최댓값을 구해야하므로 저장해둔 38과 이번에 만들어진 창의 합인 (15+11+20=46) 46과 비교하여 더 큰 값을 answer에 할당해둔다.
  2. 2번 반복

코드

public class Main {
    public static int solution(int[] nums, int k){
        int sum = 0;
        int answer = 0;

        // 1. 처음 k만큼의 창을 만들거야
        for(int i=0; i<3; i++){
            sum += nums[i];
        }

        answer = sum;

        // 2. k 크기만큼 쭉쭉 밀기
        for(int i=k; i<nums.length; i++){
            sum += nums[i];
            sum -= nums[i-k];
            answer = Math.max(sum, answer);
        }

        return answer;
    }
    public static void main(String[] args) {
        int nums[] = new int[]{12, 15, 11, 20, 25, 10, 20, 19, 13, 15};
        int k = 3;
        System.out.println(solution(nums, k));
    }
}
profile
🌱

0개의 댓글