ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Algorithm] ์—ฐ์† ๋ถ€๋ถ„์ˆ˜์—ด
    ๐Ÿ’ปProgramming/Algorithm 2024. 3. 5. 18:24
    ๋ฐ˜์‘ํ˜•

    ๋ฌธ์ œ

    N๊ฐœ์˜ ์ˆ˜๋กœ ์ด๋ฃจ์–ด์ง„ ์ˆ˜์—ด์ด ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.
    ์ด ์ˆ˜์—ด์—์„œ ์—ฐ์†๋ถ€๋ถ„์ˆ˜์—ด์˜ ํ•ฉ์ด ํŠน์ •์ˆซ์ž M์ด ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ช‡ ๋ฒˆ ์žˆ๋Š”์ง€ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์„ธ์š”.
    ๋งŒ์•ฝ N=8, M=6์ด๊ณ  ์ˆ˜์—ด์ด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค๋ฉด
    1 2 1 3 1 1 1 2
    ํ•ฉ์ด 6์ด ๋˜๋Š” ์—ฐ์†๋ถ€๋ถ„์ˆ˜์—ด์€ {2, 1, 3}, {1, 3, 1, 1}, {3, 1, 1, 1}๋กœ ์ด 3๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

     

    ๋˜ ์ด์ค‘ for๋ฌธ์„ ๋Œ๋ฉด์„œ ํ’€์ดํ•˜๋ฉด ์‰ฝ๊ฒ ์ง€๋งŒ ๊ทธ๋ ‡๊ฒŒ ๋˜์—ˆ์„ ๊ฒฝ์šฐ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ O(N^2)๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋งŒ์•ฝ N์ด 0~100000000 M๋„ 0~1000000์ •๋„ ๋˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์—„์ฒญ๋‚œ ํฌ๊ธฐ๊ฐ€ ๋˜์–ด๋ฒ„๋ฆฐ๋‹ค. 

     

    ๊ทธ๋ž˜์„œ ์ €๋ฒˆ์— ๋ฐฐ์› ๋˜

    ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ(https://suucong.tistory.com/74)์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ํˆฌํฌ์ธํ„ฐ(https://suucong.tistory.com/73)์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ•ฉ์ณ์„œ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ O(N)์ด ๋˜๋„๋ก ๊ตฌํ˜„ํ•ด๋ณด์•˜๋‹ค. 

    ํฌ์ธํ„ฐ๋ฅผ i์™€ j๋กœ ๋‘๊ณ , ๊ณ„์† i๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๋ฉด์„œ ๋”ํ•ด์ฃผ๊ณ , window๊ฐ€ M๋ณด๋‹ค ํด ๊ฒฝ์šฐ์— j๋ฅผ M๋ณด๋‹ค ํฌ์ง€ ์•Š์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•ด์„œ ๋บ€๋‹ค.

    ๋บ€ ๊ฐ’์ด M๊ณผ ์ผ์น˜ํ•  ๊ฒฝ์šฐ answer์— 1์„ ๋”ํ•ด์ฃผ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ์ด ๊ฒฝ์šฐ์— ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ O(N)์ด ๋œ๋‹ค!

    ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•ด๋ณธ ๊ฒƒ์„ ์ž‘์„ฑํ•ด๋ณด๊ฒ ๋‹ค.

    import java.util.Scanner;
    
    public class Section3_4_MyVer {
        private int solution(int n, int m, int[] list) {
            int answer = 0;
            int window = list[0];
            int j = 0;
    
            for(int i = 1; i < n; i++) {
                window += list[i];
                while(window > m && j >= 0) {
                    window -= list[j++];
                }
                if(window == m) answer++;
            }
    
            return answer;
        }
    
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            Section3_4_MyVer main = new Section3_4_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));
        }
    }

    ์ด์™€ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. 

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