๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

[์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ] 3. ์ตœ๋Œ€ ๋งค์ถœ

์‹œํ๋ฆฌํ‹ฐ์ง€ํ˜ธ 2023. 12. 24.
3. ์ตœ๋Œ€ ๋งค์ถœ
 

์„ค๋ช…

ํ˜„์ˆ˜์˜ ์•„๋น ๋Š” ์ œ๊ณผ์ ์„ ์šด์˜ํ•ฉ๋‹ˆ๋‹ค. ํ˜„์ˆ˜ ์•„๋น ๋Š” ํ˜„์ˆ˜์—๊ฒŒ N์ผ ๋™์•ˆ์˜ ๋งค์ถœ๊ธฐ๋ก์„ ์ฃผ๊ณ  ์—ฐ์†๋œ K์ผ ๋™์•ˆ์˜ ์ตœ๋Œ€ ๋งค์ถœ์•ก์ด ์–ผ๋งˆ์ธ์ง€ ๊ตฌํ•˜๋ผ๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋งŒ์•ฝ N=10์ด๊ณ  10์ผ ๊ฐ„์˜ ๋งค์ถœ๊ธฐ๋ก์ด ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด๋•Œ K=3์ด๋ฉด

12 1511 20 2510 20 19 13 15

์—ฐ์†๋œ 3์ผ๊ฐ„์˜ ์ตœ๋Œ€ ๋งค์ถœ์•ก์€ 11+20+25=56๋งŒ์›์ž…๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ๋ถ„์ด ํ˜„์ˆ˜๋ฅผ ๋„์™€์ฃผ์„ธ์š”.

์ž…๋ ฅ

์ฒซ ์ค„์— N(5<=N<=100,000)๊ณผ K(2<=K<=N)๊ฐ€ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ์ค„์— N๊ฐœ์˜ ์ˆซ์ž์—ด์ด ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ๊ฐ ์ˆซ์ž๋Š” 500์ดํ•˜์˜ ์Œ์ด ์•„๋‹Œ ์ •์ˆ˜์ž…๋‹ˆ๋‹ค.

์ถœ๋ ฅ

์ฒซ ์ค„์— ์ตœ๋Œ€ ๋งค์ถœ์•ก์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ ์ž…๋ ฅ 1 

10 3
12 15 11 20 25 10 20 19 13 15

์˜ˆ์‹œ ์ถœ๋ ฅ 1

56

 

 

<<ํ’€์ด>>

 

-๋‚˜์˜ ํ’€์ด-

 

์‹œ๊ฐ„ ๋ณต์žก๋„ : O(N^2) 

 

sliding window๋Š” ๋ฌด์Šจ ๋ง์ผ๊นŒ ใ…‹ใ…‹ ์ผ๋‹จ ๋‚ด๊ฐ€ ๋– ์˜ค๋ฅด๋Š” ๋ฐฉ์‹๋Œ€๋กœ ํ’€์—ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” O(N) ๋ฐฉ์‹์„ ์ฐพ์•„์„œ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ์—ˆ๋Š”๋ฐ ์ค‘๊ฐ„์— ๋ง‰ํžˆ๊ณ  ๋‹ค์‹œ ์ˆ˜์ •ํ•˜๋Š” ๊ณผ์ •์—์„œ ์ œ๊ณฑ์ด ๋˜์–ด ๋ฒ„๋ ธ๋‹ค ใ…Žใ…Ž..  ๊ทธ๋ ‡๊ฒŒ ์ •๋‹ต์€ ๋งž์„์ง€๋ผ๋„ ์‹œ๊ฐ„ ์ดˆ๊ณผ๋กœ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์™”๋‹ค ใ…‹ใ…‹

import java.util.*;

class Main {

    public int solution(int N, int K, int[] arr) {
        int[] answer = new int[N - K + 1];
        int index = 0;
        int num = 0;
        for(int i = 0; i < N - K + 1; i++) {
            num = 0;
           for(int j = i; j < i + K; j++) {
               num += arr[j];
           }
           answer[index++] = num;
        }
        int max = 0;
        for(int i = 0; i < N - K + 1; i++) {
            if(answer[i] > max) max = answer[i];
        }
        return max;
    }



    public static void main(String[] args) {
        Main T = new Main();
        Scanner in = new Scanner(System.in);
        int N = in.nextInt();
        int K = in.nextInt();

        int[] arr = new int[N];
        for(int i = 0; i < N; i++) {
            arr[i] = in.nextInt();
        }
        System.out.print(T.solution(N, K, arr));
    }
}

 

 

-๊ฐ•์‚ฌ๋‹˜ ํ’€์ด-

 

import java.util.*;

class Main {

    public int solution(int N, int K, int[] arr) {
       int answer = 0, sum = 0;
       for(int i = 0; i < K; i++) sum += arr[i];
       answer = sum;
       for(int j = K; j < N; j++) {
          sum  = sum + arr[j] - arr[j - K];
          answer = Math.max(answer, sum);
       }
       return answer;
    }



    public static void main(String[] args) {
        Main T = new Main();
        Scanner in = new Scanner(System.in);
        int N = in.nextInt();
        int K = in.nextInt();

        int[] arr = new int[N];
        for(int i = 0; i < N; i++) {
            arr[i] = in.nextInt();
        }
        System.out.print(T.solution(N, K, arr));
    }
}

 

๋šœ๋‘” ~ ใ…œใ…œ ใ…‹ใ…‹ ๋ฌด๋ฆŽ์„ ํƒ ์นœ๋‹ค ใ…‹ใ…‹

์‹œ๊ฐ„๋งŒ ์ถฉ๋ถ„ํ•˜๋ฉด ๋‚˜๋„ ์ด๋ ‡๊ฒŒ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์—ˆ์„๊นŒ? ์•„๋‹ˆ๋ฉด ๋„ˆ๋ฌด ์ƒ‰์•ˆ๊ฒฝ์„ ๋ผ๊ณ  ์žˆ๋‹ค๋ณด๋‹ˆ ์•ˆ ๋ณด์˜€๋˜ ๊ฒƒ์ผ๊นŒ?

๋ฐฉ์‹์€ ์ƒ๊ฐํ•ด๋ณผ ์ˆ˜ ์žˆ์„ ์ •๋„๋กœ ๊ฐ„๋‹จํ•œ ๋ฐฉ์‹์ด๋‹ค.

 

๋ง ๊ทธ๋Œ€๋กœ ์ฐฝ๋ฌธ์„ ์˜ฎ๊ฒจ ๊ฐ€๋ฉด์„œ ๊ตฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

๊ฐ„๋‹จํ•˜๊ฒŒ ๋งํ•˜๋ฉด ์ฒ˜์Œ์— ์ฐฝ๋ฌธ ํ‹€์„ ์ •ํ•ด๋‘๊ณ  ๊ทธ ๊ฐ’์„ ๊ตฌํ•œ ๋’ค, ๋‹ค์Œ ๊ฐ’์€ ์นธ ๋’ค์— ํ•˜๋‚˜๋ฅผ ๋”ํ•ด์ฃผ๊ณ  ์•ž์— ํ•˜๋‚˜๋ฅผ ๋นผ์ฃผ๋ฉด์„œ ์ฐฝ๋ฌธ์„ ์˜ฎ๊ธฐ๋Š” ํ˜•ํƒœ๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ๊ฒƒ์ด๋‹ค. ์ด๊ฒƒ์ด sliding window ๋ฐฉ์‹์ด๋‹ค.

 

 

ํ•˜ํ•˜ ใ…‹ใ…‹ ์ด ๋ฐฉ์‹์€ ์ด์ค‘ for๋ฌธ ํ˜•ํƒœ๋กœ ๊ฐ€์„œ ์ œ๊ณฑ ํ˜•ํƒœ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ ๋‚˜์˜ฌ ์ˆ˜๋„ ์žˆ๋Š” ๊ฒƒ์„ O(N)์œผ๋กœ ๋ณต์žก๋„๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹์ด๋‹ค.

 

์˜ค๋Š˜๋„ ํ•œ ์ˆ˜ ๋ฐฐ์› ๋‹ค ใ…Žใ…Ž

๋Œ“๊ธ€