Post

Sliding Window_k개 숫자 최대값 구하기

✅ n개 숫자의 배열이 주어졌을 때, 연속된 k개의 숫자를 더했을 때 최댓값을 구하세요

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
class Main {

    public int solution(int n, int k, int[] intArr){
    int answer= 0;

    //배열의 첫 k개 합 구하기
        for(int i=0; i<k; i++){
            answer += intArr[i];
        }
    //window 합을 가지고 구할거임
        int window= answer;
    //window에 전꺼 빼고, 그 다음꺼 더하기
    for(int i=k; i<n; i++){
        window += intArr[i] - intArr[i-k];
        answer= Math.max(window, answer);
    }
    return answer;
}
    public static void main(String[] args) {
        Main T = new Main();
        Scanner sc= new Scanner(System.in);
        int n = sc.nextInt();
        int k = sc.nextInt();
        int[] intArr = new int[n];
        for(int i=0; i<n; i++){
            intArr[i] = sc.nextInt();
        }
        System.out.print(T.solution(n, k, intArr));
    }
}

//⭐️input:
// 10 3
// 12 15 11 20 25 10 20 19 13 15
//⭐️output:
//56

🔵 ThingsILearned

✔️ Sliding window

코딩공책-35

  1. 먼저 기준이 되는 숫자들의 합을 구한다. (이 경우 시작되는 숫자 3개)
  2. 다음 바뀔 변수를 하나 정하고(이 경우 window)
  3. window에 전 값을 빼고, 그 다음 올 값을 더한다.
  4. 더 큰 값을 구해 최댓값을 출력

🔴🟢 Time limit exceed

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class Main {

    public int solution(int n, int k, int[] intArr){
    int answer= 0;
    int max=0;
    for(int i=0; i<n-k+1; i++){
        for(int j=i; j<k+i; j++){
            max += intArr[j];
            if(max > answer) answer=max;
        }
        max=0;
    }
    return answer;
}
    public static void main(String[] args) {
        Main T = new Main();
        Scanner sc= new Scanner(System.in);
        int n = sc.nextInt();
        int k = sc.nextInt();
        int[] intArr = new int[n];
        for(int i=0; i<n; i++){
            intArr[i] = sc.nextInt();
        }
        System.out.print(T.solution(n, k, intArr));
    }
}

  1. 시작부터 k개의 합을 구할거다
  2. 2중 for문으로, 겉에 있는 for문은 어디서부터 시작할지를 정의한다.
  3. 안에 있는 for문은 k개의 합을 구한다.
  4. 더 큰 합을 구하여 최댓값으로 출력한다.
This post is licensed under CC BY 4.0 by the author.