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를 이용해서 인덱스 에러를 찾아주는 아주 나이스한 코드를 작성했고, 함수화 시켜서 정말 깔끔하게 잘 짜신것 같다.