: '1' 주변에 '0'이 2개 이상 있을 때 0으로 만들어야 함.
추가조건 0이 1 내부에 둘러쌓여 있을 때 제외
import java.util.*;
import java.io.*;
import java.awt.Point;
public class Main {
static int[][] map ;
static boolean[][] visited;
static int N,M,time;
static int[] dx = {-1,0,1,0};
static int[] dy = {0,1,0,-1};
static Queue<Point> que = new LinkedList<>();
public static void main(String[] args) throws Exception{
// 값 입력받기 -- >
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
map = new int[N][M];
for(int i=0; i<N; i++) {
st = new StringTokenizer(br.readLine());
for(int j=0; j<M; j++) {
map[i][j] = Integer.parseInt(st.nextToken());
}
}
// <-- 값 입력받기
while(true){
boolean noCheese = true;
Search(0,0);
for (int i=0;i<N;i++){
for(int j=0;j<M;j++){
if(map[i][j]>=3){
map[i][j] = 0;
noCheese = false;
}else if(map[i][j] == 2){
map[i][j] = 1;
}
}
}
if(noCheese){
System.out.println(time);
break;
}
time += 1;
}
}
// 공기노출된 치즈 +1 하기
public static void Search(int x, int y){
que.offer(new Point(x,y));
visited = new boolean[N][M];
visited[x][y] = true;
while(!que.isEmpty()){
Point now = que.poll();
for(int i=0;i<4;i++){
int xx = now.x+dx[i];
int yy = now.y+dy[i];
if(xx<0 || xx>=N || yy<0 || yy>=M ) continue;
if(map[xx][yy] >= 1){
map[xx][yy] += 1;
}else if (!visited[xx][yy]){
que.offer(new Point(xx,yy));
visited[xx][yy] = true;
}
}
}
}
}
내부 치즈를 어떻게 하나 했는데.
0,0 에서 출발해서
1을 만나면 +1 하고, 0이면 큐에 추가하는 방식으로 1 내부 0에는 접근 못하게 하는 접근방식에 감탄 또 감탄