프로그래머스

안전지대

backend_fighting 2022. 12. 8. 10:14
728x90

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

 

오래걸렸던점 : 조건에서 또 막혔었다.... 조건 확인 앤드앤드!!!!!!!!!!!!!

 

아래 코드 프로그래머스 출처

베스트 코드 : 원래의 베스트코드는 아에 읽을수 조차 없었다... 그아래 코드로 대체하는데 좋은 방법들을 많이 사용했다.

 

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) {
                }
            }
        }
    }

}

set area존 정할때 try catch를 이용해서 인덱스 에러를 찾아주는 아주 나이스한 코드를 작성했고, 함수화 시켜서 정말 깔끔하게 잘 짜신것 같다.

 

728x90