https://www.acmicpc.net/problem/2573
๋ฌธ์
์ง๊ตฌ ์จ๋ํ๋ก ์ธํ์ฌ ๋ถ๊ทน์ ๋น์ฐ์ด ๋ น๊ณ ์๋ค. ๋น์ฐ์ ๊ทธ๋ฆผ 1๊ณผ ๊ฐ์ด 2์ฐจ์ ๋ฐฐ์ด์ ํ์ํ๋ค๊ณ ํ์. ๋น์ฐ์ ๊ฐ ๋ถ๋ถ๋ณ ๋์ด ์ ๋ณด๋ ๋ฐฐ์ด์ ๊ฐ ์นธ์ ์์ ์ ์๋ก ์ ์ฅ๋๋ค. ๋น์ฐ ์ด์ธ์ ๋ฐ๋ค์ ํด๋น๋๋ ์นธ์๋ 0์ด ์ ์ฅ๋๋ค. ๊ทธ๋ฆผ 1์์ ๋น์นธ์ ๋ชจ๋ 0์ผ๋ก ์ฑ์์ ธ ์๋ค๊ณ ์๊ฐํ๋ค.
2 | 4 | 5 | 3 | |||
3 | 2 | 5 | 2 | |||
7 | 6 | 2 | 4 | |||
๊ทธ๋ฆผ 1. ํ์ ๊ฐ์๊ฐ 5์ด๊ณ ์ด์ ๊ฐ์๊ฐ 7์ธ 2์ฐจ์ ๋ฐฐ์ด์ ์ ์ฅ๋ ๋น์ฐ์ ๋์ด ์ ๋ณด
๋น์ฐ์ ๋์ด๋ ๋ฐ๋ท๋ฌผ์ ๋ง์ด ์ ํด์๋ ๋ถ๋ถ์์ ๋ ๋นจ๋ฆฌ ์ค์ด๋ค๊ธฐ ๋๋ฌธ์, ๋ฐฐ์ด์์ ๋น์ฐ์ ๊ฐ ๋ถ๋ถ์ ํด๋น๋๋ ์นธ์ ์๋ ๋์ด๋ ์ผ๋ ๋ง๋ค ๊ทธ ์นธ์ ๋์๋จ๋ถ ๋ค ๋ฐฉํฅ์ผ๋ก ๋ถ์ด์๋ 0์ด ์ ์ฅ๋ ์นธ์ ๊ฐ์๋งํผ ์ค์ด๋ ๋ค. ๋จ, ๊ฐ ์นธ์ ์ ์ฅ๋ ๋์ด๋ 0๋ณด๋ค ๋ ์ค์ด๋ค์ง ์๋๋ค. ๋ฐ๋ท๋ฌผ์ ํธ์์ฒ๋ผ ๋น์ฐ์ ๋๋ฌ์ธ์ฌ ์์ ์๋ ์๋ค. ๋ฐ๋ผ์ ๊ทธ๋ฆผ 1์ ๋น์ฐ์ ์ผ๋ ํ์ ๊ทธ๋ฆผ 2์ ๊ฐ์ด ๋ณํ๋๋ค.
๊ทธ๋ฆผ 3์ ๊ทธ๋ฆผ 1์ ๋น์ฐ์ด 2๋ ํ์ ๋ณํ ๋ชจ์ต์ ๋ณด์ฌ์ค๋ค. 2์ฐจ์ ๋ฐฐ์ด์์ ๋์๋จ๋ถ ๋ฐฉํฅ์ผ๋ก ๋ถ์ด์๋ ์นธ๋ค์ ์๋ก ์ฐ๊ฒฐ๋์ด ์๋ค๊ณ ๋งํ๋ค. ๋ฐ๋ผ์ ๊ทธ๋ฆผ 2์ ๋น์ฐ์ ํ ๋ฉ์ด๋ฆฌ์ด์ง๋ง, ๊ทธ๋ฆผ 3์ ๋น์ฐ์ ์ธ ๋ฉ์ด๋ฆฌ๋ก ๋ถ๋ฆฌ๋์ด ์๋ค.
2 | 4 | 1 | ||||
1 | 1 | 5 | ||||
5 | 4 | 1 | 2 | |||
๊ทธ๋ฆผ 2
3 | ||||||
4 | ||||||
3 | 2 | |||||
๊ทธ๋ฆผ 3
ํ ๋ฉ์ด๋ฆฌ์ ๋น์ฐ์ด ์ฃผ์ด์ง ๋, ์ด ๋น์ฐ์ด ๋ ๋ฉ์ด๋ฆฌ ์ด์์ผ๋ก ๋ถ๋ฆฌ๋๋ ์ต์ด์ ์๊ฐ(๋ )์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ๊ทธ๋ฆผ 1์ ๋น์ฐ์ ๋ํด์๋ 2๊ฐ ๋ต์ด๋ค. ๋ง์ผ ์ ๋ถ ๋ค ๋ น์ ๋๊น์ง ๋ ๋ฉ์ด๋ฆฌ ์ด์์ผ๋ก ๋ถ๋ฆฌ๋์ง ์์ผ๋ฉด ํ๋ก๊ทธ๋จ์ 0์ ์ถ๋ ฅํ๋ค.
์ ๋ ฅ
์ฒซ ์ค์๋ ์ด์ฐจ์ ๋ฐฐ์ด์ ํ์ ๊ฐ์์ ์ด์ ๊ฐ์๋ฅผ ๋ํ๋ด๋ ๋ ์ ์ N๊ณผ M์ด ํ ๊ฐ์ ๋น์นธ์ ์ฌ์ด์ ๋๊ณ ์ฃผ์ด์ง๋ค. N๊ณผ M์ 3 ์ด์ 300 ์ดํ์ด๋ค. ๊ทธ ๋ค์ N๊ฐ์ ์ค์๋ ๊ฐ ์ค๋ง๋ค ๋ฐฐ์ด์ ๊ฐ ํ์ ๋ํ๋ด๋ M๊ฐ์ ์ ์๊ฐ ํ ๊ฐ์ ๋น ์นธ์ ์ฌ์ด์ ๋๊ณ ์ฃผ์ด์ง๋ค. ๊ฐ ์นธ์ ๋ค์ด๊ฐ๋ ๊ฐ์ 0 ์ด์ 10 ์ดํ์ด๋ค. ๋ฐฐ์ด์์ ๋น์ฐ์ด ์ฐจ์งํ๋ ์นธ์ ๊ฐ์, ์ฆ, 1 ์ด์์ ์ ์๊ฐ ๋ค์ด๊ฐ๋ ์นธ์ ๊ฐ์๋ 10,000 ๊ฐ ์ดํ์ด๋ค. ๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ ํ๊ณผ ์ด, ๋ง์ง๋ง ํ๊ณผ ์ด์๋ ํญ์ 0์ผ๋ก ์ฑ์์ง๋ค.
์ถ๋ ฅ
์ฒซ ์ค์ ๋น์ฐ์ด ๋ถ๋ฆฌ๋๋ ์ต์ด์ ์๊ฐ(๋ )์ ์ถ๋ ฅํ๋ค. ๋ง์ผ ๋น์ฐ์ด ๋ค ๋ น์ ๋๊น์ง ๋ถ๋ฆฌ๋์ง ์์ผ๋ฉด 0์ ์ถ๋ ฅํ๋ค.
ํ์ด
BFS / DFS ๋ฅผ ์ด์ฉํ ๊ตฌํ ๋ฌธ์ โผ๏ธ
๋น์ฐ์ ๋ฉ์ด๋ฆฌ ๊ฐฏ์ ์ธ์ด์ฃผ๊ณ ๐ ๋๊ฐ์ ๋ฉ์ด๋ฆฌ๋ก ๋๋ ์ง์ง ์์์ผ๋ฉด ๐ ๋ น์ฌ์ค
๐ ๋ ๊ฐ ์ด์์ ๋ฉ์ด๋ฆฌ๋ก ๋๋ ์ง๋ฉด ๐ ์ข ๋ฃ
๐ ๋ชจ๋ ๋น์ฐ์ด ๋ น์๋๋ฐ ๋ถ๋ฆฌ๋์ง ์์ผ๋ฉด ๐ 0 ์ถ๋ ฅ
์ฝ๋
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main_BOJ_2573_๋น์ฐ {
public static class node{
int x;
int y;
node(int x, int y){
this.x = x;
this.y = y;
}
}
static int N, M;
static int[][] map;
static boolean[][] isVisted;
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());
map = new int[N][M];
for(int i = 0 ; i < N ; i++){
stringTokenizer = new StringTokenizer(br.readLine());
for(int j = 0 ; j < M ; j++){
map[i][j] = Integer.parseInt(stringTokenizer.nextToken());
}
}
int year = 0;
while(true){
isVisted = new boolean[N][M];
int cnt = 0;
boolean flag = false;
for(int i = 0 ; i < N ; i++){
for(int j = 0 ; j < M ; j++){
if(map[i][j] != 0 && !isVisted[i][j]){
cnt++;
if(cnt == 2){
flag = true;
break;
}
cntIceBerg(i, j);
}
}
}
if(flag)
break;
if(cnt == 0){
year = 0;
break;
}
meltIce();
year++;
}
System.out.println(year);
}
private static void meltIce() {
int[][] copyMap = new int[N][M];
for(int i = 0 ; i < N ; i++){
copyMap[i] = Arrays.copyOf(map[i], M);
}
for(int i = 0 ; i < N ; i++){
for(int j = 0 ; j < M ; j++){
if(copyMap[i][j] != 0){
int zeroCnt = 0;
for(int d = 0 ; d < 4; d++){
int nx = i + dx[d];
int ny = j + dy[d];
if(nx < 0 || N <= nx || ny < 0 || M <= ny)
continue;
if(copyMap[nx][ny] == 0)
zeroCnt++;
}
map[i][j] = Math.max(0, copyMap[i][j] - zeroCnt);
}
}
}
}
private static void cntIceBerg(int x, int y) {
Queue<node> queue = new LinkedList<>();
isVisted[x][y] = true;
queue.offer(new node(x, y));
while(!queue.isEmpty()){
node now = queue.poll();
for(int i = 0 ; i < 4; i++){
int nx = now.x + dx[i];
int ny = now.y + dy[i];
if(nx < 0 || N <= nx || ny < 0 || M <= ny)
continue;
if(map[nx][ny] != 0 && !isVisted[nx][ny]){
queue.offer(new node(nx, ny));
isVisted[nx][ny] = true;
}
}
}
}
}
'์๊ณ ๋ฆฌ์ฆ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ ๋ฐฑ์ค / BOJ 1080 ] ํ๋ ฌ ( JAVA / ์๋ฐ ) (0) | 2021.10.11 |
---|---|
[ ๋ฐฑ์ค / BOJ 20551 ] Sort ๋ง์คํฐ ๋ฐฐ์งํ์ ํ๊ณ์ ( JAVA / ์๋ฐ ) (0) | 2021.10.11 |
[ ๋ฐฑ์ค / BOJ 2473 ] ์ธ ์ฉ์ก ( JAVA / ์๋ฐ ) (0) | 2021.10.07 |
[ ๋ฐฑ์ค / BOJ 2812 ] ํฌ๊ฒ ๋ง๋ค๊ธฐ ( JAVA / ์๋ฐ ) (0) | 2021.10.07 |
[ ๋ฐฑ์ค / BOJ 2758 ] ๋ก๋ ( JAVA / ์๋ฐ ) (0) | 2021.10.04 |