ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Algorithm] Sliding Window ์•Œ๊ณ ๋ฆฌ์ฆ˜
    ๐Ÿ’ปProgramming/Algorithm 2024. 3. 3. 16:53
    ๋ฐ˜์‘ํ˜•

    ๋ฌธ์ œ

    12 15 11 20 25 10 20 19 13 15

    ์™€ ๊ฐ™์€ N๊ฐœ์˜ ์›์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฐฐ์—ด๊ณผ ๋ณ€์ˆ˜ K๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ ์—ฐ์†๋œ K๊ฐœ์˜ ํ•ฉ์ค‘์—์„œ ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ๊ตฌํ•ด๋ผ

     

    ์˜ˆ์‹œ ์ž…๋ ฅ

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

    ์˜ˆ์‹œ ์ž…๋ ฅ์˜ ์ฒซ๋ฒˆ์งธ ์ˆ˜๋Š” N๊ฐœ์˜ ๋ฐฐ์—ด์„ ์ค„๊ฒƒ์ด๋‹ค๋ผ๋Š” ๊ฒƒ์ด๊ณ , ๋‘๋ฒˆ์งธ ์ˆ˜๋Š” K๋ฅผ ์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

     

    ์˜ˆ์‹œ ์ถœ๋ ฅ

    56

     

    ์ฒ˜์Œ์— ๋‚ด๊ฐ€ ์งฐ๋˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ด์ค‘ for๋ฌธ์„ ์‚ฌ์šฉํ•˜์˜€๋‹ค. ๊ทธ๋žฌ๋”๋‹ˆ ๋˜ Timeout Error๊ฐ€ ๋ฐœ์ƒํ•˜์˜€๋‹ค. ๋‚˜๋Š” ์ด์ค‘ for๋ฌธ์„ ์ด์šฉํ•ด๋„ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ O(N)์ผ๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐํ•˜์˜€๋‹ค. ์ € ์˜ˆ์‹œ ์ž…๋ ฅ์˜ ๊ฒฝ์šฐ์—๋Š”,,, ์ƒ๊ฐํ•ด๋ณด๋ฉด ๋งŒ์•ฝ N์ด 100000์ธ๋ฐ, K๊ฐ€ 60000์ด๋‹ค? ๊ทธ๋Ÿฌ๋ฉด ์‹œ๊ฐ„๋ณต์žก๋„๋Š” ๊ฑฐ์˜ O(N*N)์ด ๋˜์–ด๋ฒ„๋ฆฐ๋‹ค.. ๊ทธ๋ž˜์„œ ํƒ€์ž„์•„์›ƒ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์˜€๋˜ ๊ฒƒ์ด๋‹ค.

     

    ํ•˜์ง€๋งŒ Sliding Window ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋ฉด ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ O(N)์ด ๋œ๋‹ค. 

     

    ์ผ๋‹จ ์ฒ˜์Œ์— window์— k๋งŒํผ for๋ฌธ์„ ๋Œ์•„ ๋ฐฐ์—ด ๊ฐ’์„ ๋”ํ•ด์ค€๋‹ค.  ๊ทธ ๋‹ค์Œ window๋กœ ์ด๋™ํ•˜๋ฉด ์ด์ „ window์™€ k-1๊ฐœ๊ฐ€ ๊ฒน์นœ๋‹ค. ๊ทธ๋ž˜์„œ ์ด์ „ window๊ฐ’์—์„œ ๊ฒน์น˜์ง€ ์•Š๋Š” ๊ฐ’์„ ๋นผ์ฃผ๊ณ , ์ƒˆ๋กœ ์ถ”๊ฐ€๋œ ๊ฐ’์„ ๋”ํ•ด์ฃผ๋ฉด for๋ฌธ์„ ํ•œ ๋ฒˆ ๋” ๋Œ ํ•„์š”๊ฐ€ ์—†์–ด์ ธ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ O(N)์ด ๋œ๋‹ค. 

    import java.util.Scanner;
    
    public class Section3_3_MyVer {
        private int solution(int n, int m, int[] list) {
            int answer;
            int window = 0;
            for(int i = 0; i < m; i++) {
                window += list[i];
            }
            answer = window;
    
            for(int j = 1; j < n-m+1; j++) {
                window += (-list[j-1] + list[j+m-1]);
                if(window > answer) {
                    answer = window;
                }
            }
    
            return answer;
        }
    
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            Section3_3_MyVer main = new Section3_3_MyVer();
    
            int n = scanner.nextInt();
            int m = scanner.nextInt();
            int[] list = new int[n];
            for(int i = 0; i < n; i++) {
                list[i] = scanner.nextInt();
            }
    
            System.out.println(main.solution(n, m, list));
        }
    }

    ์ € ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ฐ”ํƒ•์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์งฐ๋”๋‹ˆ Timeout Error๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ณ  ํ†ต๊ณผํ•˜์˜€๋‹ค. 

    ๋ฐ˜์‘ํ˜•
Designed by Tistory.