코딩테스트(Level 0~1)

[JAVA, Programmers] 안전지대(자바)

justdoIT0730 2022. 12. 30. 22:56
728x90
728x90

1. 문제 설명

 다음 그림과 같이 지뢰가 있는 지역과 지뢰에 인접한 , 아래, , 대각선 칸을 모두 위험지역으로 분류합니다.


 지뢰는 2차원 배열 board 1 표시되어 있고 board에는 지뢰가 매설 지역 1, 지뢰가 없는 지역 0 존재합니다.
지뢰가 매설된 지역의 지도 board 매개변수로 주어질 , 안전한 지역의 수를 return하도록 solution 함수를 완성해주세요.

 

2. 제한사항

board n * n 배열입니다.

1 ≤ n ≤ 100

지뢰는 1 표시되어 있습니다.

board에는 지뢰가 있는 지역 1 지뢰가 없는 지역 0 존재합니다.

 

3. 입출력

board result
[[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
[[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]] 13
[[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]] 0

 

4. 입출력 설명

- 입출력 #1

 (3, 2) 지뢰가 있으므로 지뢰가 있는 지역과 지뢰와 인접한 , 아래, , , 대각선 8칸은 위험지역입니다. 따라서 16 return합니다.

 

- 입출력 #2

 (3, 2), (3, 3) 지뢰가 있으므로 지뢰가 있는 지역과 지뢰와 인접한 , 아래, , , 대각선은 위험지역입니다. 따라서 위험지역을 제외한 13 return합니다.

 

- 입출력 #3

모든 지역에 지뢰가 있으므로 안전지역은 없습니다. 따라서 0 return합니다.

 

5. 풀이

class Solution {
	public int solution(int[][] board) {
		int [][]list=new int [board.length+2][board.length+2];
		int answer =0;
		for(int i=0; i<board.length;i++) {
			for(int y=0; y<board.length;y++) {
				if(board[i][y]==1) {
					for(int a=(i-1)+1;a<=(i+1)+1; a++) {
						for(int b=(y-1)+1; b<=(y+1)+1; b++) {
							if(list[a][b]!=1) {
								list[a][b]=2;
							}
						}
					}
				}
			}
		}
		for(int i=1; i<list.length-1;i++) {
			for(int y=1;y<list.length-1;y++) {
				if(list[i][y]==0) {answer++;}
			}
		}
		return answer;
	}
}

 

728x90
728x90