https://www.acmicpc.net/problem/2636
๋ฌธ์
์๋ <๊ทธ๋ฆผ 1>๊ณผ ๊ฐ์ด ์ ์ฌ๊ฐํ ์นธ๋ค๋ก ์ด๋ฃจ์ด์ง ์ฌ๊ฐํ ๋ชจ์์ ํ์ด ์๊ณ , ๊ทธ ์์ ์์ ์น์ฆ(ํ์์ผ๋ก ํ์๋ ๋ถ๋ถ)๊ฐ ๋์ฌ ์๋ค. ํ์ ๊ฐ์ฅ์๋ฆฌ(<๊ทธ๋ฆผ 1>์์ ๋ค๋ชจ ์นธ์ X์น ๋ถ๋ถ)์๋ ์น์ฆ๊ฐ ๋์ฌ ์์ง ์์ผ๋ฉฐ ์น์ฆ์๋ ํ๋ ์ด์์ ๊ตฌ๋ฉ์ด ์์ ์ ์๋ค.
์ด ์น์ฆ๋ฅผ ๊ณต๊ธฐ ์ค์ ๋์ผ๋ฉด ๋ น๊ฒ ๋๋๋ฐ ๊ณต๊ธฐ์ ์ ์ด๋ ์นธ์ ํ ์๊ฐ์ด ์ง๋๋ฉด ๋ น์ ์์ด์ง๋ค. ์น์ฆ์ ๊ตฌ๋ฉ ์์๋ ๊ณต๊ธฐ๊ฐ ์์ง๋ง ๊ตฌ๋ฉ์ ๋๋ฌ์ผ ์น์ฆ๊ฐ ๋ น์์ ๊ตฌ๋ฉ์ด ์ด๋ฆฌ๋ฉด ๊ตฌ๋ฉ ์์ผ๋ก ๊ณต๊ธฐ๊ฐ ๋ค์ด๊ฐ๊ฒ ๋๋ค. <๊ทธ๋ฆผ 1>์ ๊ฒฝ์ฐ, ์น์ฆ์ ๊ตฌ๋ฉ์ ๋๋ฌ์ผ ์น์ฆ๋ ๋ น์ง ์๊ณ ‘c’๋ก ํ์๋ ๋ถ๋ถ๋ง ํ ์๊ฐ ํ์ ๋ น์ ์์ด์ ธ์ <๊ทธ๋ฆผ 2>์ ๊ฐ์ด ๋๋ค.
<๊ทธ๋ฆผ 1> ์๋ ์น์ฆ ๋ชจ์
๋ค์ ํ ์๊ฐ ํ์๋ <๊ทธ๋ฆผ 2>์์ ‘c’๋ก ํ์๋ ๋ถ๋ถ์ด ๋ น์ ์์ด์ ธ์ <๊ทธ๋ฆผ 3>๊ณผ ๊ฐ์ด ๋๋ค.
<๊ทธ๋ฆผ 2> ํ ์๊ฐ ํ์ ์น์ฆ ๋ชจ์
<๊ทธ๋ฆผ 3> ๋ ์๊ฐ ํ์ ์น์ฆ ๋ชจ์
<๊ทธ๋ฆผ 3>์ ์๋ ์น์ฆ์ ๋ ์๊ฐ ํ ๋ชจ์์ ๋ํ๋ด๊ณ ์์ผ๋ฉฐ, ๋จ์ ์กฐ๊ฐ๋ค์ ํ ์๊ฐ์ด ๋ ์ง๋๋ฉด ๋ชจ๋ ๋ น์ ์์ด์ง๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ฒ์ ์น์ฆ๊ฐ ๋ชจ๋ ๋ น์ ์์ด์ง๋ ๋ฐ๋ ์ธ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค. <๊ทธ๋ฆผ 3>๊ณผ ๊ฐ์ด ์น์ฆ๊ฐ ๋ น๋ ๊ณผ์ ์์ ์ฌ๋ฌ ์กฐ๊ฐ์ผ๋ก ๋๋์ด ์ง ์๋ ์๋ค.
์ ๋ ฅ์ผ๋ก ์ฌ๊ฐํ ๋ชจ์์ ํ์ ํฌ๊ธฐ์ ํ ์กฐ๊ฐ์ ์น์ฆ๊ฐ ํ ์์ ์ฃผ์ด์ก์ ๋, ๊ณต๊ธฐ ์ค์์ ์น์ฆ๊ฐ ๋ชจ๋ ๋ น์ ์์ด์ง๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ๊ณผ ๋ชจ๋ ๋ น๊ธฐ ํ ์๊ฐ ์ ์ ๋จ์์๋ ์น์ฆ์กฐ๊ฐ์ด ๋์ฌ ์๋ ์นธ์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์๋ ์ฌ๊ฐํ ๋ชจ์ ํ์ ์ธ๋ก์ ๊ฐ๋ก์ ๊ธธ์ด๊ฐ ์์ ์ ์๋ก ์ฃผ์ด์ง๋ค. ์ธ๋ก์ ๊ฐ๋ก์ ๊ธธ์ด๋ ์ต๋ 100์ด๋ค. ํ์ ๊ฐ ๊ฐ๋ก์ค์ ๋ชจ์์ด ์ ์ค๋ถํฐ ์ฐจ๋ก๋ก ๋์งธ ์ค๋ถํฐ ๋ง์ง๋ง ์ค๊น์ง ์ฃผ์ด์ง๋ค. ์น์ฆ๊ฐ ์๋ ์นธ์ 0, ์น์ฆ๊ฐ ์๋ ์นธ์ 1๋ก ์ฃผ์ด์ง๋ฉฐ ๊ฐ ์ซ์ ์ฌ์ด์๋ ๋น์นธ์ด ํ๋์ฉ ์๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์๋ ์น์ฆ๊ฐ ๋ชจ๋ ๋ น์์ ์์ด์ง๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ถ๋ ฅํ๊ณ , ๋์งธ ์ค์๋ ๋ชจ๋ ๋ น๊ธฐ ํ ์๊ฐ ์ ์ ๋จ์์๋ ์น์ฆ์กฐ๊ฐ์ด ๋์ฌ ์๋ ์นธ์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค.
์ฝ๋
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main_BOJ_2636_์น์ฆ {
static int N, M, cheese, ans, time;
static int[][] board;
static boolean[][] isVisited;
static int[] dx = {-1, 0, 0, 1};
static int[] dy = {0, -1, 1, 0};
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer stringTokenizer = new StringTokenizer(br.readLine());
N = Integer.parseInt(stringTokenizer.nextToken());
M = Integer.parseInt(stringTokenizer.nextToken());
cheese = 0;
time = 0;
ans = 0;
board = new int[N][M];
for(int i = 0 ; i < N ; i++){
stringTokenizer = new StringTokenizer(br.readLine());
for(int j = 0 ; j < M ; j++){
board[i][j] = Integer.parseInt(stringTokenizer.nextToken());
if(board[i][j] == 1)
cheese++;
}
}
while(cheese != 0){
time++;
ans = cheese;
meltCheese();
}
System.out.println(time);
System.out.println(ans);
}
private static void meltCheese() {
Queue<int[]> queue = new LinkedList<>();
queue.offer(new int[]{0,0});
isVisited = new boolean[N][M];
isVisited[0][0] = true;
while(!queue.isEmpty()){
int[] cur = queue.poll();
for(int i = 0 ; i < 4 ; i++){
int nx = cur[0] + dx[i];
int ny = cur[1] + dy[i];
if(nx < 0 || ny < 0 || N <= nx || M <= ny || isVisited[nx][ny]) continue;
if(board[nx][ny] == 1){
cheese--;
board[nx][ny] = 0;
}
else if(board[nx][ny] == 0){
queue.offer(new int[]{nx,ny});
}
isVisited[nx][ny] = true;
}
}
}
}
'์๊ณ ๋ฆฌ์ฆ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ ๋ฐฑ์ค / BOJ 1068 ] ํธ๋ฆฌ ( ์๋ฐ / JAVA ) (0) | 2021.11.24 |
---|---|
[ ๋ฐฑ์ค / BOJ 1092 ] ๋ฐฐ ( ์๋ฐ / JAVA ) (0) | 2021.11.24 |
[ ๋ฐฑ์ค / BOJ 16951 ] ๋ธ๋ก ๋์ด ( ์๋ฐ / JAVA ) (0) | 2021.11.11 |
[ ๋ฐฑ์ค / BOJ 2668 ] ์ซ์๊ณ ๋ฅด๊ธฐ ( ์๋ฐ / JAVA ) (0) | 2021.11.11 |
[ ๋ฐฑ์ค / BOJ 17175 ] ํผ๋ณด๋์น๋ ์ง๊ฒจ์ก~ ( ์๋ฐ / JAVA ) (0) | 2021.11.11 |