728x90
package a0404;
import java.util.*;
import java.io.*;
/*
1) 2차원배열 탐색하면서 8방탐색했을때 모두 지뢰 없는곳 큐에 넣는다
2) 큐에 있는 좌표들 순서대로 꺼내서 8방 원소들 visit처리,
3) 8방원소들 visit처리하면서 또 8방지뢰없는 곳이라면 큐에 또 넣음
4) 2,3 큐 원소 없을때까지 반복
5) visit처리 안되어있는 부분만큼 result++
*/
public class 파핑파핑지뢰찾기 {
static int size;
static char[][] arr;
static int[][] visit;
static int[] di = {-1, -1, -1, 0, 1, 1, 1, 0};
static int[] dj = {-1, 0, 1, 1, 1, 0, -1, -1}; //8방탐색
static Queue<int[]> q = new LinkedList<>();
static boolean safe(int i, int j) {
if(0<=i&&i<size && 0<=j&&j<size)return true;
return false;
}
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int tc = Integer.parseInt(br.readLine());
for(int t=1; t<=tc; t++) {
size = Integer.parseInt(br.readLine());
arr = new char[size][size];
visit = new int[size][size]; // 배열 초기화
int answer = 0;
for(int i=0; i<size; i++) {
String st = br.readLine();
for(int j=0; j<size; j++) {
arr[i][j] = st.charAt(j); //배열 입력
}
}
for(int i=0; i<size; i++) {
for(int j=0; j<size; j++) {
if(near8check(i,j) && visit[i][j]==0 && arr[i][j]=='.') {
q.add(new int[] {i, j});
visit[i][j] = 1;
answer++;
while(!q.isEmpty()) {
int[] now = q.poll();
int nowi = now[0]; int nowj = now[1];
for(int d=0; d<8; d++) {
int ni = nowi+di[d];
int nj = nowj+dj[d];
if(safe(ni, nj) && visit[ni][nj]==0 && arr[ni][nj]=='.') {
visit[ni][nj] = 1;
if(near8check(ni,nj))q.add(new int[] {ni, nj});
}
}
}
}
}
}
for(int i=0; i<size; i++) {
for(int j=0; j<size; j++) {
if(visit[i][j]==0 && arr[i][j]=='.')answer++;
}
}
System.out.println("#"+t+" "+answer);
}
}
static boolean near8check(int i, int j) { // 8방탐색했을때 폭탄없는지 체크
for(int d=0; d<8; d++) {
int ni = i+di[d];
int nj = j+dj[d];
if(safe(ni,nj)) {
if(arr[ni][nj]!='.')return false;
else continue;
}else continue;
}
return true;
}
}
'알고리즘 문제풀이' 카테고리의 다른 글
SWEA - 벽돌깨기 java (0) | 2022.04.05 |
---|---|
백준15961 - 회전초밥 java (0) | 2022.04.05 |
SWEA - 프로세서 연결하기 JAVA (0) | 2022.04.05 |
[알고리즘] 백준17472 - 다리만들기2 java (0) | 2022.04.01 |
[알고리즘] 백준4485 - 녹색 옷 입은 애가 젤다지? java풀이 (0) | 2022.04.01 |