728x90
SMALL

public class Solution {

    public int solution(int[][] param) {
        int safeZone = 0;
        // 위험지역 Set
        for (int i = 0; i < param.length; i++) 
        {
            for (int j = 0; j < param.length; j++) 
            {
                if (param[i][j] == 1)
                    setArea(param, i, j);
            }
        }
        // 안전지역 Count
        
        for (int i = 0; i < param.length; i++) 
        {
            for (int j = 0; j < param.length; j++) 
            {
                if (param[i][j] == 0)
                    safeZone++;
            }
        }

        return safeZone;
    }

    void setArea(int[][] param, int x, int y) {
        for (int i = -1; i < 2; i++) 
        {
            for (int j = -1; j < 2; j++) 
            {
                try 
                {
                    if (param[x + i][y + j] == 0)
                        param[x + i][y + j] = 2;
                } 
                catch (Exception e) 
                {
                }
            }
        }
    }

}

 

 

 

 

public class Solution {
    int[][] d = {{-1, -1}, {-1, 0}, {-1, 1}, {0, -1}, {0, 0}, {0, 1}, {1, -1}, {1, 0}, {1, 1}};

    public int solution(int[][] board) {
        int n = board.length;
        boolean[][] unable = new boolean[n][n];
        
        for (int i = 0; i < n; i++) 
        {
            for (int j = 0; j < n; j++) 
            {
                if (board[i][j] == 1) 
                {
                    for (int[] k: d) 
                    {
                        int nearX = i + k[0];
                        int nearY = j + k[1];
                        
                        if (nearX >= 0 && nearX < n && nearY >= 0 && nearY < n) 
                        {
                            unable[nearX][nearY] = true;
                        }
                    }
                } 
            }
        }

        int unableCount = 0;
        
        for (int i = 0; i < n; i++) 
        {
            for (int j = 0; j < n; j++) 
            {
                if (unable[i][j]) 
                {
                    unableCount++;
                }
            }
        }
        
        return n * n - unableCount;
    }
}

 

 

 

////////////////////////

 

 

 

public class Solution {
    public int solution(int[,] board) {
        int answer = 0;
        int length = board.GetLength(0);
        int[] x = new int[8]{-1, 1, 0, 0, -1, -1, 1, 1};
        int[] y = new int[8]{0, 0, -1, 1, -1, 1, -1, 1};
        int[,] temp = new int[length,length]; 
        int nx = 0;
        int ny = 0;
        
        for(int i = 0; i < length; i++)
        {
            for(int j = 0; j < length; j++)
            {
                if(board[i,j] == 1)
                {
                    temp[i,j] = 1;
                    for(int k = 0; k < 8; k++)
                    {
                        nx = i + x[k];
                        ny = j + y[k];
                        if(nx >= 0 && nx < length && ny >= 0 && ny < length)
                        {
                            temp[nx,ny] = 1;
                        }
                    }
                }
            }
        }
        
        for(int i = 0; i < length; i++)
        {
            for(int j = 0; j < length; j++)
            {
                if(temp[i,j] != 1)
                {
                    answer++;
                }
            }
        }   
        return answer;
    }
}

 

 

 

////////////////////////

 

 

C#

 

 

 

using System;

public class Solution {
    public int solution(int[,] board) {
        int safeZone = 0;
        // 위험지역 Set
        for (int i = 0; i < board.GetLength(0); i++) 
        {
            for (int j = 0; j < board.GetLength(1); j++) 
            {
                if (board[i,j] == 1)
                    setArea(board, i, j);
            }
        }
        // 안전지역 Count
        
        for (int i = 0; i < board.GetLength(0); i++) 
        {
            for (int j = 0; j < board.GetLength(1); j++) 
            {
                if (board[i,j] == 0)
                    safeZone++;
            }
        }

        return safeZone;
    }

    void setArea(int[,] board, int x, int y) {
        for (int i = -1; i < 2; i++) 
        {
            for (int j = -1; j < 2; j++) 
            {
                try 
                {
                    if (board[x + i,y + j] == 0)
                        board[x + i,y + j] = 2;
                } 
                catch (Exception e) 
                {
                }
            }
        }
    
    }
}

 

 

 

//// try catch(Exception e)를 활용해서 어레이의 범위를 벗어나는 경우를 빠져나오게 하는 방식이다.

/// 그리고 폭탄의 영향 범위 지역을 2로 세팅해서 safezone의 숫자를 계산할 수 있도록 설정했다.

728x90

설정

트랙백

댓글