코린이의 소소한 공부노트

[프로그래머스/Lv.0] 안전지대 본문

코딩테스트 풀이/JAVA

[프로그래머스/Lv.0] 안전지대

무지맘 2022. 11. 9. 20:57

1. Input

1) 지뢰가 매설된 지역의 지도 board

2) board는 정수 2차원 배열

 

2. Output

1) 안전지대의 칸 수

2) 지뢰를 기준으로 상, , , , 대각선 4칸해서 최대 8칸이 위험지역(X표시)

 

3. Constraint

1) boardn * n 배열

2) 1 n 100

3) 지뢰가 매설된 지역은 1, 지뢰가 없으면 0을 표시

4) board에는 0 또는 1만 존재

 

4. Example

Input: board=       -> Output: 16

[[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]]

설명: 25칸 중 1칸에 지뢰, 8칸이 위험지역이므로 25-1-8=16칸이 안전지대

 

5. Code

1) 첫 코드(2022/10/25)

int answer=0, rowlen=board.length, collen=board[0].length;
// X표시 = -1
for(int i=0 ; i<rowlen ; i++){
    for(int j=0 ; j<collen ; j++){
        if(board[i][j]==1){
            int srow = i-1>0 ? i-1 : 0;
            int erow = i+1<rowlen ? i+1 : rowlen-1;
            int scol = j-1>0 ? j-1 : 0;
            int ecol = j+1<collen ? j+1 : collen-1;
            for(int k=srow ; k<=erow ; k++)
                for(int l=scol ; l<=ecol ; l++)
                    if(board[k][l]!=1)
                        board[k][l] = -1;
        } // if(board[i][j]==1)
    } // for j
} // for i
// 안전지대(0)만 세기
for(int i=0 ; i<rowlen ; i++)
    for(int j=0 ; j<collen ; j++)
        if(board[i][j]==0) answer++;
return answer;