์ฒ์ ํ ๋งํ ๋ฌธ์ ํ์์ ๋๋ '์ด๋ ๊ฒ ๊ผผ๊ผผํ๊ฒ ์๊ฐํด์ผ ํ๋ ๋ฌธ์ ๋ ์๋ค๋..!'๋ผ๋ฉด์ ๋๋๋ ๊ธฐ์ต์ด ๋๋ค.
์ด๋ฒ์ ๋ฌธ์ ํ ๋์๋ ํ ๋งํ ์ฌ๋ถ์ ํ ๋งํ ์ข
๋ฅ๋ฅผ ๋ด๋ tomato[][]
์ ์ต๊ธฐ๊น์ง ๊ฑธ๋ฆฌ๋ ์ผ์๋ฅผ ๋ด์ day[][]
๋ฐฐ์ด์ ๊ฐ๊ฐ ๋ง๋ค์๋ค.
์ค๋ ๊ณ ๋ฏผํ๊ธฐ ์ซ์ด์ ๊ทธ๋ฌ๋๋ฐ ์ด์ ์ ํผ ๋ฐฉ์์ ๋ณด๋ tomato[][]
๋ฐฐ์ด ํ๋๋ก ๋๋๋ค. ๋ฉ๋ชจ๋ฆฌ๋ ํจ์ฌ ์ ๊ฒ ๋ค๊ณ , ์๊ฐ๋ ๋ ๊ฑธ๋ฆฌ๋ ๋ฐฐ์ด ํ๋๋ก ํธ๋ ๊ฒ ์ข๊ธด ํ ๊ฒ ๊ฐ๋ค.
์ต์ ํ ๋งํ ๊ฐ ์๋ค๋ฉด 1, ๊ทธ๋ฅ ํ ๋งํ ๊ฐ ์๋ค๋ฉด 0, ํ ๋งํ ๊ฐ ์๋ค๋ฉด -1์ ๊ฐ์ด ๋ค์ด์จ๋ค๋ ์ ์์ ์ฐฉ์ํด ์ฒ์์ ์ต์ ํ ๋งํ ๋ค์ BFS ํ์ ๋ฃ์ ๋ ๋ฌด์กฐ๊ฑด dayCount๋ฅผ 2๋ก ์ธํ
ํด์ ๋ฃ์๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ค์์ ๊ฐ ๊ณณ์ ํ ๋งํ ๊ฐ ์ด๋ฏธ ์ต์๋์ง ์ ์ต์๋์ง ํ๋ฒ ๋ ์ฒดํฌํ ํ์ ์์ด tomato[newN][newM]
์ด 0์ด๋ฉด ๋ฌด์กฐ๊ฑด ํ์ ์ง์ด๋ฃ์ผ๋ฉด ๋๋ค.
์ด์ ์ ์ง ์ฝ๋๊ฐ ๋ ์ข๋ค ใ
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
public class Main {
public static int M;
public static int N;
public static int[][] tomato;
public static Queue<int[]> queue = new LinkedList<int[]>();
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] str = null;
str = br.readLine().trim().split(" ");
M = Integer.parseInt(str[0]);
N = Integer.parseInt(str[1]);
tomato = new int[N][M];
int totalTomato = 0;
int rottenTomato = 0;
for(int i=0;i<N;i++){
str = br.readLine().trim().split(" ");
for(int j=0;j<M;j++){
tomato[i][j] = Integer.parseInt(str[j]);
switch(tomato[i][j]){
case 0:
totalTomato++;
break;
case 1:
totalTomato++;
rottenTomato++;
queue.offer(new int[]{i,j,2});
break;
}
}
}
if(totalTomato==rottenTomato){
System.out.println(0);
return;
}
bfs();
for(int i=0;i<N;i++){
for(int j=0;j<M;j++){
if(tomato[i][j]==0){
System.out.println(-1);
return;
}
}
}
int max = Integer.MIN_VALUE;
for(int i=0;i<N;i++){
for(int j=0;j<M;j++){
max = Math.max(max, tomato[i][j]);
}
}
System.out.println(max-2);
}//end main
public static int[][] direction = { {1,0}, {-1,0}, {0,1}, {0,-1} };
private static void bfs() {
int[] temp;
int newX;
int newY;
int time;
while(!queue.isEmpty()){
temp = queue.poll();
time = temp[2];
for(int d=0;d<4;d++){
newX = temp[0] + direction[d][0];
newY = temp[1] + direction[d][1];
if(newX>=0 && newX<N && newY>=0 && newY<M && tomato[newX][newY]==0){
tomato[newX][newY] = time+1;
queue.offer(new int[]{newX,newY,time+1});
}
}
}
}
}//end class
'์๊ณ ๋ฆฌ์ฆ > ๋ฌธ์ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๋ฐ] ๋ฐฑ์ค 2206 - ๋ฒฝ ๋ถ์๊ณ ์ด๋ํ๊ธฐ (0) | 2020.12.12 |
---|---|
[์๋ฐ] ๋ฐฑ์ค 1697 - ์จ๋ฐ๊ผญ์ง (1) | 2020.12.12 |
[์๋ฐ] ๋ฐฑ์ค 1753 - ์ต๋จ๊ฒฝ๋ก (0) | 2020.12.06 |
[์๋ฐ] ๋ฐฑ์ค 1012 - ์ ๊ธฐ๋ ๋ฐฐ์ถ (0) | 2020.12.06 |
[์๋ฐ] ๋ฐฑ์ค 2667 - ๋จ์ง๋ฒํธ๋ถ์ด๊ธฐ (0) | 2020.12.06 |