๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Programmers lv-0

์•ˆ์ „์ง€๋Œ€ - Java [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์ž…๋ฌธ]

by ๊ทคํ”ผํ‚ค 2022. 11. 28.

 

โค๏ธ Problem

๋”๋ณด๊ธฐ
  • ๋ฌธ์ œ
    ๋‹ค์Œ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์ง€๋ขฐ๊ฐ€ ์žˆ๋Š” ์ง€์—ญ๊ณผ ์ง€๋ขฐ์— ์ธ์ ‘ํ•œ ์œ„, ์•„๋ž˜, ์ขŒ, ์šฐ ๋Œ€๊ฐ์„  ์นธ์„ ๋ชจ๋‘ ์œ„ํ—˜์ง€์—ญ์œผ๋กœ ๋ถ„๋ฅ˜ํ•ฉ๋‹ˆ๋‹ค.
    ์ง€๋ขฐ๋Š” 2์ฐจ์› ๋ฐฐ์—ด board์— 1๋กœ ํ‘œ์‹œ๋˜์–ด ์žˆ๊ณ  board์—๋Š” ์ง€๋ขฐ๊ฐ€ ๋งค์„ค ๋œ ์ง€์—ญ 1๊ณผ, ์ง€๋ขฐ๊ฐ€ ์—†๋Š” ์ง€์—ญ 0๋งŒ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.
    ์ง€๋ขฐ๊ฐ€ ๋งค์„ค๋œ ์ง€์—ญ์˜ ์ง€๋„ board๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ์•ˆ์ „ํ•œ ์ง€์—ญ์˜ ์นธ ์ˆ˜๋ฅผ returnํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

 

  • ์ œํ•œ ์‚ฌํ•ญ
    • board๋Š” n * n ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค.
    • 1 ≤ n ≤ 100
    • ์ง€๋ขฐ๋Š” 1๋กœ ํ‘œ์‹œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
    • board์—๋Š” ์ง€๋ขฐ๊ฐ€ ์žˆ๋Š” ์ง€์—ญ 1๊ณผ ์ง€๋ขฐ๊ฐ€ ์—†๋Š” ์ง€์—ญ 0๋งŒ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

 

  • ์ž…์ถœ๋ ฅ ์˜ˆ & ์„ค๋ช…
no board result
1 [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 1, 0, 0], [0, 0, 0, 0, 0]] 16
2 [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 1, 1, 0], [0, 0, 0, 0, 0]] 16
3 [[1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1]] 16
  1. (3, 2)์— ์ง€๋ขฐ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ์ง€๋ขฐ๊ฐ€ ์žˆ๋Š” ์ง€์—ญ๊ณผ ์ง€๋ขฐ์™€ ์ธ์ ‘ํ•œ ์œ„, ์•„๋ž˜, ์ขŒ, ์šฐ, ๋Œ€๊ฐ์„  ์ด 8์นธ์€ ์œ„ํ—˜์ง€์—ญ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ 16์„ returnํ•ฉ๋‹ˆ๋‹ค.
  2. (3, 2), (3, 3)์— ์ง€๋ขฐ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ์ง€๋ขฐ๊ฐ€ ์žˆ๋Š” ์ง€์—ญ๊ณผ ์ง€๋ขฐ์™€ ์ธ์ ‘ํ•œ ์œ„, ์•„๋ž˜, ์ขŒ, ์šฐ, ๋Œ€๊ฐ์„ ์€ ์œ„ํ—˜์ง€์—ญ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์œ„ํ—˜์ง€์—ญ์„ ์ œ์™ธํ•œ ์นธ ์ˆ˜ 13์„ returnํ•ฉ๋‹ˆ๋‹ค.
  3. ๋ชจ๋“  ์ง€์—ญ์— ์ง€๋ขฐ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ์•ˆ์ „์ง€์—ญ์€ ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ 0์„ returnํ•ฉ๋‹ˆ๋‹ค.

 


 

๐Ÿ’› Solution

ํ’€์ด

class Solution {
    public int solution(int[][] board) {
        int n = board.length;
        int[][] copy = new int[n][n];

        for(int row=0; row<n; row++) {
            for(int col=0; col<n; col++) {
                if (board[row][col]==1) {
                    destroy(col, row, n, copy);
                }

            }
        }

        int cnt = 0;
        for(int i=0; i<copy.length; i++) {
            for(int j=0; j<copy.length; j++) {
                if(copy[i][j]==0) {
                    cnt++;
                }
            }
        }

        return cnt;

    }

    private static void destroy(int col, int row, int n, int[][] copy) {
        for(int r=row-1; r<=row+1; r++) {
            if(r<0 || r>=n) {
                continue;
            } else {
                for(int c=col-1; c<=col+1; c++) {
                    if(c<0 || c>=n) {
                        continue;
                    } else {
                        copy[r][c] = 1;
                    }

                }
            }
        }
    }
}

 

์ฒ˜๋ฆฌ์†๋„ VERY GOOD

 


 

Comment

์ด์ฐจ์› ๋ฐฐ์—ด ๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ๋งˆ๋‹ค, ๊ณ 1 ๊ฒจ์šธ์— ์ด๊ณผ์—์„œ ๋ฌธ๊ณผ๋กœ ์ง„๋กœ๋ฅผ ๋ฐ”๊ฟจ๋˜ ๋‚ด ๋ชจ์Šต์ด ๋– ์˜ค๋ฅธ๋‹ค..^^.. ๊ทธ ๋•Œ ํšŒํ”ผํ•œ ๋•๋ถ„์— ๋„ˆ๋Š” n๋…„์ด ํ›Œ์ฉ ์ง€๋‚œ ์ง€๊ธˆ๋„ ์ˆ˜ํ•™ ๋•Œ๋ฌธ์— ๊ฐœ๊ณ ์ƒ ์ค‘์ด๋ž€๋‹ค๐Ÿ˜‚ ํ•˜ ์ด ๋ง์„ ๊ผญ ์ „ํ•ด์ฃผ๊ณ  ์‹ถ์€๋ฐ ์ „ํ•  ๊ธธ์ด ์—†๋„ค..

์ด์ฐจ์› ๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ ๊ฐ€์žฅ ํž˜๋“  ์ ์€ ๊ฐ•๋ ฅํ•œ ๊ฑฐ๋ถ€๊ฐ ๋ฟ์ด ์•„๋‹ˆ๋ผ ์ขŒํ‘œ์˜ ์ด๋ฏธ์ง€ํ™”๊ฐ€ ์ „ํ˜€ ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์ด๋‹ค. ์ด๋ฏธ์ง€ํ™”๊ฐ€ ๋˜์ง€ ์•Š์œผ๋‹ˆ ๋– ์˜ค๋ฅด๋Š” ์ฝ”๋“œ๋„ ๊ทธ์ € ๋…ธ๊ฐ€๋‹ค์„ฑ์ด ์ง™๊ฒŒ ๊น”๋ฆฐ... ๊ทธ๋Ÿฐ...ใ…Ž

๋ฌด์‹ํ•˜๋ฉด ์šฉ๊ฐํ•˜๋‹ค๊ณ , ๋‚˜๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์งฐ๋‹ค.

class Solution {
    public int solution(int[][] board) {
        int n = board.length;
        int[][] copy = new int[n][n];

        for(int col=0; col<n; col++) {
            for(int row=0; row<n; row++) {
                if(board[row][col] == 1) {
                    boolean colMinus = (col-1)>-1;
                    boolean colPlus = (col+1)<n;
                    boolean rowMinus = (row-1)>-1;
                    boolean rowPlus = (row+1)<n;

                    copy[row][col] = 1;
                    if (colMinus && colPlus && rowMinus && rowPlus) {
                        copy[row-1][col-1] = 1;
                        copy[row][col-1] = 1;
                        copy[row+1][col-1] = 1;
                        copy[row-1][col] = 1;
                        copy[row+1][col] = 1;
                        copy[row-1][col+1] = 1;
                        copy[row][col+1] = 1;
                        copy[row+1][col+1] = 1;
                    } else if (colMinus && colPlus) {
                        if(rowMinus) {
                            copy[row-1][col-1] = 1;
                            copy[row][col-1] = 1;
                            copy[row-1][col] = 1;
                            copy[row-1][col+1] = 1;
                            copy[row][col+1] = 1;
                        } else if (rowPlus) {
                            copy[row][col-1] = 1;
                            copy[row+1][col-1] = 1;
                            copy[row+1][col] = 1;
                            copy[row][col+1] = 1;
                            copy[row+1][col+1] = 1;
                        }
                    } else if (colMinus) {
                        if(rowMinus) {
                            copy[row-1][col-1] = 1;
                            copy[row][col-1] = 1;
                            copy[row-1][col] = 1;
                        } else if (rowPlus) {
                            copy[row][col-1] = 1;
                            copy[row+1][col-1] = 1;
                            copy[row+1][col] = 1;
                        }
                    } else if (colPlus) {
                        if(rowMinus) {
                            copy[row-1][col] = 1;
                            copy[row-1][col+1] = 1;
                            copy[row][col+1] = 1;
                        } else if (rowPlus) {
                            copy[row+1][col] = 1;
                            copy[row][col+1] = 1;
                            copy[row+1][col+1] = 1;
                        }
                    } else {
                        if(rowMinus) {
                            copy[row-1][col] = 1;
                        } else if (rowPlus) {
                            copy[row+1][col] = 1;
                        }
                    }
                }
            }
        }

        int cnt = 0;
        for(int i=0; i<copy.length; i++) {
            for(int j=0; j<copy.length; j++) {
//                System.out.println("["+i+"]["+j+"] = "+copy[i][j]);
                if(copy[i][j]==0) {
                    cnt++;
                }
            }
        }
        return cnt;
    }
}

์ด๊ฑธ ๋ณด๊ฒŒ ๋  ์‚ฌ๋žŒ๋“ค์€ ๋‚˜์˜ ๋ฌด๋ชจํ•จ์— ๊ฒฝ์•…ํ•˜๊ฒ ์ง€๋งŒ ๊ทธ๋ƒฅ ์˜ฌ๋ ธ๋‹ค. ์–ด์ฐจํ”ผ ์ด๊ฑธ ์ฝ๋Š” ๊ฑด ๋‚˜๋ฟ์ธ๊ฑฐ ๊ฐ™์œผ๋‹ˆ๊นŒ๐Ÿ˜… ๋ถ€๋„๋Ÿฌ์›€์€ ๋‚˜์˜ ๋ชซ.

๋ฌธ์ œ๋Š” ๋…ธ๊ฐ€๋‹ค๋ผ๋„ ์ฝ”๋“œ๊ฐ€ ์ž˜ ์‹คํ–‰๋˜๋ฉด ๊ดœ์ฐฎ์•˜์„ ํ…๋ฐ, ์ „ํ˜€ ์•„๋‹ˆ์—ˆ๋‹ค. ๋„๋Œ€์ฒด ํ…Œ์ŠคํŠธ 4์™€ 5๋Š” ๋ฌด์Šจ ๊ฐ’์ด ๋“ค์–ด๊ฐ€์žˆ์„๊นŒ.. ์•„์ง๋„ ๋ฏธ์Šคํ…Œ๋ฆฌ ๊ทธ ์ž์ฒด.

 

ํ•œ์ฐธ์„ ๊ณ ๋ฏผํ•ด๋ดค๋Š”๋ฐ, ๋„์ €ํžˆ ์˜ˆ์™ธ ์ƒํ™ฉ์ด ๋– ์˜ค๋ฅด์ง€ ์•Š์•˜๋‹ค. ๊ฒฐ๊ตญ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋‚˜์˜ ๋…ธ๊ฐ€๋‹ค๋กœ ์ปค๋ฒ„ํ•˜๊ธฐ์—๋Š” ๋ฌด๋ฆฌ๋ผ๋Š” ํŒ๋‹จ์„ ํ–ˆ๋‹ค.

์ด ๋ฌธ์ œ์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ํฌ์ธํŠธ๊ฐ€ ๋ฌด์—‡์ธ์ง€๋ถ€ํ„ฐ ์ ‘๊ทผํ–ˆ๋‹ค. ํฌ์ธํŠธ๋Š” ์ง€๋ขฐ๊ฐ€ ์žˆ๋Š” ํ–‰[row]๊ณผ ์—ด[col]์„ ±1ํ•œ ์œ„์น˜๋“ค์ด ๋ฐฐ์—ด์˜ ๋ฒ”์œ„๋ฅผ ๋„˜์–ด๊ฐ€๋Š๋ƒ ์•„๋‹ˆ๋ƒ์ด๋‹ค. ์ด ํฌ์ธํŠธ๋ฅผ ๋ฉ”์ธ์—์„œ ์ฒ˜๋ฆฌํ•˜๋ ค๊ณ  ํ•˜๋‹ˆ ๋…ธ๊ฐ€๋‹ค ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ ๋ฌธ๋“ ํด๋ž˜์Šคํ™”ํ•ด์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋˜์ง€ ์•Š๋‚˜? ํ•˜๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

ํด๋ž˜์Šค destroy์˜ ์ธ์ˆ˜๋กœ๋Š” int col, int row, int n, int[][] copy๋ฅผ ์ „๋‹ฌํ–ˆ๋Š”๋ฐ ๊ฐ๊ฐ ํ–‰ ์œ„์น˜, ์—ด ์œ„์น˜, ๋ฐฐ์—ด ๊ธธ์ด, ๊ฐ’์„ ์‚ฝ์ž…ํ•  ๋ฐฐ์—ด์„ ์˜๋ฏธํ•œ๋‹ค. ์ง€๋ขฐ๊ฐ€ ์žˆ๋Š” ํ–‰[row]๊ณผ ์—ด[col]์„ ±1ํ•œ ์œ„์น˜๊ฐ€ ๋ฐฐ์—ด์˜ ๋ฒ”์œ„๋ฅผ ๋„˜์–ด๊ฐ€๋ฉด continue;๋ฅผ, ๋ฒ”์œ„ ๋‚ด์ธ ๊ฒฝ์šฐ์—๋Š” copy[r][c]์— 1์„ ์‚ฝ์ž…ํ•˜๋„๋ก ํด๋ž˜์Šค destroy๋ฅผ ๊ตฌํ˜„ํ–ˆ๋‹ค. (int ๋ฐฐ์—ด์˜ ์ดˆ๊ธฐ ๊ฐ’์€ 0์ด๋ฏ€๋กœ ๋ณ„๋„์˜ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š” ์—†์—ˆ๋‹ค)

๊ทธ ๋‹ค์Œ ์ด์ค‘ for๋ฌธ์„ ์‚ฌ์šฉํ•ด์„œ ๊ฐ’ 0์„ ๊ฐ€์ง€๋Š” ๋ฐฐ์—ด๊ฐ’์„ cnt++;๋กœ ์•Œ์•„๋‚ธ ๋’ค returnํ•˜๋ฉด ๋!

๊ตฌํ˜„ํ•˜๊ณ  ๋‚˜๋‹ˆ ๊ทธ๋ ‡๊ฒŒ ์–ด๋ ต์ง€ ์•Š์€ ๋ฌธ์ œ์˜€๋Š”๋ฐ.. ์—ญ์‹œ ๋ญ๋“  ์ฒซ ๋‹จ์ถ”๊ฐ€ ์ค‘์š”ํ•œ ๊ฒƒ ๊ฐ™๋‹ค.

 

4์ !!!!!!!!!!!! ์ ์ˆ˜๋ฅผ ๋– ๋‚˜์„œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋‹ค๋Š” ์‚ฌ์‹ค์ด ๋‚  ๋„ˆ๋ฌด ์‹ ๋‚˜๊ฒŒ ํ•ด ๐Ÿ˜œ๐Ÿ’–

 

 

 

๋Œ“๊ธ€