ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Algo Rhythm๐Ÿ•บ๐Ÿ’ƒ] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๊ณ ๋“์  kit ๋“ฑ๊ตฃ๊ธธ
    Algo Rhythm๐Ÿ•บ๐Ÿ’ƒ/Programmers 2020. 8. 6. 15:21

    ๐Ÿ“š ๋ฌธ์ œ ์„ค๋ช…

    ๊ณ„์†๋˜๋Š” ํญ์šฐ๋กœ ์ผ๋ถ€ ์ง€์—ญ์ด ๋ฌผ์— ์ž ๊ฒผ์Šต๋‹ˆ๋‹ค. ๋ฌผ์— ์ž ๊ธฐ์ง€ ์•Š์€ ์ง€์—ญ์„ ํ†ตํ•ด ํ•™๊ต๋ฅผ ๊ฐ€๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ง‘์—์„œ ํ•™๊ต๊นŒ์ง€ ๊ฐ€๋Š” ๊ธธ์€ m x n ํฌ๊ธฐ์˜ ๊ฒฉ์ž๋ชจ์–‘์œผ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

     

    ์•„๋ž˜ ๊ทธ๋ฆผ์€ m = 4, n = 3 ์ธ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค.

     

    ๊ฐ€์žฅ ์™ผ์ชฝ ์œ„, ์ฆ‰ ์ง‘์ด ์žˆ๋Š” ๊ณณ์˜ ์ขŒํ‘œ๋Š” (1, 1)๋กœ ๋‚˜ํƒ€๋‚ด๊ณ  ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ์•„๋ž˜, ์ฆ‰ ํ•™๊ต๊ฐ€ ์žˆ๋Š” ๊ณณ์˜ ์ขŒํ‘œ๋Š” (m, n)์œผ๋กœ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

    ๊ฒฉ์ž์˜ ํฌ๊ธฐ m, n๊ณผ ๋ฌผ์ด ์ž ๊ธด ์ง€์—ญ์˜ ์ขŒํ‘œ๋ฅผ ๋‹ด์€ 2์ฐจ์› ๋ฐฐ์—ด puddles์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ์ง‘์—์„œ ํ•™๊ต๊นŒ์ง€ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์ตœ๋‹จ๊ฒฝ๋กœ์˜ ๊ฐœ์ˆ˜๋ฅผ 1,000,000,007๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

     

    ์ œํ•œ์‚ฌํ•ญ

    • ๊ฒฉ์ž์˜ ํฌ๊ธฐ m, n์€ 1 ์ด์ƒ 100 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.

      • m๊ณผ n์ด ๋ชจ๋‘ 1์ธ ๊ฒฝ์šฐ๋Š” ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

    • ๋ฌผ์— ์ž ๊ธด ์ง€์—ญ์€ 0๊ฐœ ์ด์ƒ 10๊ฐœ ์ดํ•˜์ž…๋‹ˆ๋‹ค.

    • ์ง‘๊ณผ ํ•™๊ต๊ฐ€ ๋ฌผ์— ์ž ๊ธด ๊ฒฝ์šฐ๋Š” ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

     

    ๐ŸŽฏ ์–ด๋–ป๊ฒŒ ํ’€์—ˆ๋‚˜

    ์ฒซ๋ฒˆ์งธ ์‹œ๋„ (50/ 100) - ํšจ์œจ์„ฑ ํ†ต๊ณผ๐Ÿ™…๐Ÿ™…‍โ™€๏ธ๐Ÿ™…‍โ™‚๏ธ

    class Solution {
        private static final boolean PUDDLE  = true;
        
        public int solution(int m, int n, int[][] puddles) {
            int answer = 0;
            long[][] route = new long[m + 1][n + 1]; // default : 0
            boolean[][] map = new boolean[m + 1][n + 1]; // default : false
            
            // init map
            for(int i = 0; i < puddles.length; i++) {
                int x = puddles[i][0];
                int y = puddles[i][1];
                
                map[x][y] = PUDDLE;
            }
            
            for(int i = 1; i < route.length; i++) {
                for(int j = 1; j < route[i].length; j++) {
                    if(i == 1 && j == 1) {
                        route[i][j] = 1;
                        continue;
                    }
                    
                    if(map[i][j] == PUDDLE) continue;
                    
                    route[i][j] = route[i - 1][j] + route[i][j - 1]; // from left + from top
                }
            }
            
            answer = (int)(route[m][n] % 1000000007);
            
            return answer;
        }
    }

     

    ์ตœ์ข… ์ฝ”๋“œ

    class Solution {
        private static final int PUDDLE = -1;
        
        public int solution(int m, int n, int[][] puddles) {
            int answer = 0;
            int[][] map = new int[m + 1][n + 1]; // default : 0
                
            // init map
            for(int i = 0; i < puddles.length; i++) {
                int x = puddles[i][0];
                int y = puddles[i][1];
                
                map[x][y] = PUDDLE;
            }
            
            for(int i = 1; i < map.length; i++) {
                for(int j = 1; j < map[i].length; j++) {
                    if(i == 1 && j == 1) {
                        map[i][j] = 1;
                        continue;
                    }
                    
                    if(map[i][j] == PUDDLE) {
                        map[i][j] = 0;
                        continue;
                    }
                    
                    map[i][j] = (map[i - 1][j] + map[i][j - 1]) % 1000000007; // from left + from top
                }
            }
            
            answer = map[m][n];
            
            return answer;
        }
    }

     

    ๐Ÿง ์™œ ์ €๋ ‡๊ฒŒ ํ’€์—ˆ๋‚˜

    ์ฒซ๋ฒˆ์งธ ์‹œ๋„ (50/ 100) - ํšจ์œจ์„ฑ ํ†ต๊ณผ๐Ÿ™…๐Ÿ™…‍โ™€๏ธ๐Ÿ™…‍โ™‚๏ธ

    ์ด ๋ฌธ์ œ๋ฅผ ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ช‡ ๊ฐ€์ง€ ๋ฐฐ๊ฒฝ์ง€์‹์ด ํ•„์š”ํ•˜๋‹ค.

    ๋จผ์ € Top left๋กœ๋ถ€ํ„ฐ bottom right๊นŒ์ง€ ์ตœ๋‹จ ๊ฒฝ๋กœ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ตœ๋‹จ ๊ฒฝ๋กœ๋กœ ์ด๋™ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์•„๋ž˜, ์˜ค๋ฅธ์ชฝ ์ด๋™๋งŒ ํ•ด์•ผ ํ•œ๋‹ค.

    ๊ทธ๋ฆฌ๊ณ  ์•„๋ž˜, ์˜ค๋ฅธ์ชฝ ์ด๋™๋งŒ ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•œ ์ง€์—ญ์— ๋„๋‹ฌํ•˜๊ธฐ ๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ์˜ ๊ฐœ์ˆ˜๋Š” (์œ— ์ง€์—ญ์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ์˜ ๊ฐœ์ˆ˜) + (์™ผ์ชฝ ์ง€์—ญ์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ์˜ ๊ฐœ์ˆ˜)์ด๋‹ค. ํ•˜์ง€๋งŒ ๋งŒ์•ฝ ๊ทธ ์ง€์—ญ์ด ๋ฌผ์›…๋ฉ์ด๋ผ๋ฉด ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๊ณ„์‚ฐํ•˜์ง€ ์•Š๊ณ  0์œผ๋กœ ๋‘์–ด์•ผ ํ•œ๋‹ค.

     

    ์œ„์™€ ๊ฐ™์€ ๋ฐฐ๊ฒฝ์ง€์‹์„ ์ด์šฉํ•ด์„œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ฒฐ๊ณผ๋Š” ํšจ์œจ์„ฑ ์‹คํŒจ์˜€๋‹ค...๐Ÿ˜‚

     

    ์ตœ์ข… ์ฝ”๋“œ

    ์•„๋ฌด๋ฆฌ ์ƒ๊ฐํ•ด๋„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๊ฒฐํ•จ์€ ์—†์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์งˆ๋ฌธํ•˜๊ธฐ๋ฅผ ๋ดค๋Š”๋ฐ overflow๊ฐ€ ์•ˆ ์ƒ๊ธฐ๋„๋ก modulo ์—ฐ์‚ฐ์„ ๋ฏธ๋ฆฌ ํ•˜๋ฉด ํ†ต๊ณผํ•œ๋‹ค๊ณ  ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ๊ทธ ๋ฐฉ๋ฒ•๋Œ€๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๊ณ  ํ†ต๊ณผํ–ˆ๋‹ค๐Ÿ˜„

     

    ๐Ÿ“– ๋ฌด์—‡์„ ๋ฐฐ์› ๋‚˜

    Type์˜ ๋ฒ”์œ„์— ๊ด€ํ•ด์„œ ๋Š˜ ๊ณ ๋ คํ•˜๋Š” ์Šต๊ด€์„ ๊ฐ€์ง€์ž!

     

    ๋Œ“๊ธ€

Designed by Tistory.