https://softeer.ai/practice/info.do?idx=1&eid=411&sw_prbl_sbms_sn=180543
1. ๋ฌธ์
NxM ํฌ๊ธฐ์ map์ด ์ฃผ์ด์ง๋ค.
์ ์ฌ๊ฐํ์ 2๊ฐ ์ด์์ ๋ณ์ด ์ธ๋ถ ๊ณต๊ธฐ์ ์ ์ดํ์ ๋ ๋ น๊ณ , ํด๋น ์ผ์๋ค์ ํ ์๊ฐ ๋ง์ ๋ น๋๋ค.
์ผ์์ด ๋ชจ๋ ๋ น์ ์์ด์ง๋๋ฐ ๊ฑธ๋ฆฌ๋ ์ ํํ ์๊ฐ์ ์ถ๋ ฅํ๋ผ.
check point
1. ๋ด๋ถ์ ์๋ ๊ณต๊ฐ์ ์ธ๋ถ ๊ณต๊ธฐ์ ์ ์ดํ์ง ์๋ ๊ฒ์ผ๋ก ๊ฐ์ ํ๋ค.
2. ๋งจ ๊ฐ์ฅ์๋ฆฌ์๋ ์ผ์์ด ๋์ด์ง ์๋ ๊ฒ์ผ๋ก ๊ฐ์ ํ๋ค.
2. ํ์ด
bfs๋ฌธ์ ์ด๋ค.
๋ฐฑ์ค ์น์ฆ์ฒ๋ผ ํ๋ ค๊ณ ํ์์ผ๋ (์ธ๋ถ ๊ณต๊ธฐ bfs, ์ผ์ bfs, ๋ น์ ์ผ์ ๋ฐ๋ก ํ์ ๋ด๊ณ bfs ๋๋๋ฉด ํ ์์ ๋ค์ ๊ฒ๋ค ๋ น์ ๊ฑธ๋ก ์ฒ๋ฆฌ)์ด๋ ๊ฒ ํ๋ฉด ์๊ฐ์ด๊ณผ๊ฐ ๋๋ ๊ฒ ๊ฐ๋ค.
๋ค๋ฅธ ์ฌ๋์ ํ์ด๋ฅผ ๋ณด๋๊น (์ด์คfor๋ฌธ+bfs ํ๋)๋ก ํ์๊ธธ๋ ์ฐธ๊ณ ํด์ ํ์๋ค.
๋ฐฉ๋ฒ์
1. ์ธ๋ถ ๊ณต๊ธฐ๋ฅผ ๊ธฐ์ค์ผ๋ก ํ๋ ๊ฒ์ด๋ค. ๊ทธ๋์ bfs์ ์์์ ์ ๋งค๋ฒ 0,0์ด ๋๋ค. (๊ฐ์ฅ์๋ฆฌ์๋ ์ผ์์ด ์๊ธฐ ๋๋ฌธ)
2. ์ธ๋ถ ๊ณต๊ธฐ๋ฅผ ๋ฐ๋ผ์ bfs๋ฅผ ์งํํ ๋ map์ ๊ฐ์ด 1์ธ ์ง์ , ์ฆ ์ผ์์ธ ์ง์ ์ ๋ง๋๊ฒ ๋๋ค.
์ด ๋ visited๋ฅผ 1 ๋๋ ค์ฃผ๊ณ queue์๋ ๋ฃ์ง ์๋๋ค. ๋ฐ๋ฉด์ ๋๊ฐ์ ์ธ๋ถ๊ณต๊ธฐ๋ฅผ ๋ง๋๋ฉด visited์ 1์ฆ๊ฐ๊ฐ ์๋๋ผ 1์ ๊ฐ์ผ๋ก ๋ฃ์ด์ฃผ๊ณ queue์ ์ถ๊ฐํด์ฃผ์ด ๋ฐฉ๋ฌธ ์ฌ๋ถ๋ฅผ ํ์ธํ๋ค.
3. ์ด๋ ๊ฒ ๋๋ฉด map์ ๊ณ์ํด์ ํ์ํ๋ค๊ฐ ํด๋น ์ผ์ ์ง์ ์ ๋ค์ ๋ง๋๊ฒ ๋๋ฉด visited๊ฐ 2๋ก ์ฆ๊ฐํ๊ฒ ๋๊ณ , ์ด๊ฒ์ ์ธ๋ถ ๊ณต๊ธฐ๊ฐ 2๋ณ ์ด์ ์ ํด์๋ค๋ ๋ป์ด๋ฏ๋ก ๋ น์ ๋์์ด ๋๋ค.
4. bfs๊ฐ ๋๋๋ฉด ๋ง์ง๋ง์ผ๋ก ์ผ์์ ๋ น์ฌ์ค๋ค. ์ด์คfor๋ฌธ์ผ๋ก map์ ๋๋ฉด์ visited๊ฐ 2์ด์์ธ ์ง์ ์ ์ธ๋ถ๊ณต๊ธฐ์ 2๋ฒ ์ด์ ๋ฟ์ ์ผ์ ์ง์ ์ผ ๊ฒ์ด๋ฏ๋ก 0์ผ๋ก ๊ฐฑ์ ํด์ ๋ น์ ๊ฒ์ผ๋ก ์ฒ๋ฆฌํ๊ณ ์ธ๋ถ๊ณต๊ธฐ์ ๊ฐ๊ฒ ๋ง๋ค์ด ์ค๋ค.
5. while๋ฌธ์ ๋ ๋๋ง๋ค time์ 1์ฉ ๋๋ ค์ฃผ์ด ๋ ์ด์ ๋ น์ ์ผ์์ด ์์ ๋ ๋น ์ ธ๋์จ๋ค.
3. ์ฝ๋
import java.util.*;
import java.io.*;
public class Main
{
static int H, W, ans, time;
static int[][] map, visited;
static Queue<Pos> queue, melt_queue;
static int[] dy = {-1,1,0,0};
static int[] dx = {0,0,-1,1};
public static void main(String args[]) throws Exception
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
H = Integer.parseInt(st.nextToken());
W = Integer.parseInt(st.nextToken());
map = new int[H][W];
for (int i=0; i<H; i++) {
st = new StringTokenizer(br.readLine());
for (int j=0; j<W; j++) {
map[i][j] = Integer.parseInt(st.nextToken());
}
} //์
๋ ฅ ๋
solution();
System.out.println(ans);
}
static void solution() {
while (true) {
int cnt = 0;
visited = new int[H][W];
for (int i=0; i<H; i++) {
for (int j = 0; j<W; j++) {
if (map[i][j] == 1) {
cnt++;
bfs();
}
}
}
if (cnt == 0) {
ans = time;
break;
}
for (int i=0; i<H; i++) {
for (int j=0; j<W; j++) {
if (visited[i][j] >= 2) {
map[i][j] = 0; //๋
น์
}
}
}
time++;
}
}
static void bfs() {
queue = new ArrayDeque<> ();
melt_queue = new ArrayDeque<> ();
queue.offer(new Pos(0,0));
visited[0][0] = 1;
while (!queue.isEmpty()) {
Pos now = queue.poll();
for (int d=0; d<4; d++) {
int ny = now.y+dy[d];
int nx = now.x+dx[d];
if (ny<0 || ny>=H || nx<0 || nx>=W) continue;
//check
if (map[ny][nx] == 1) {
visited[ny][nx]++;
} else if (map[ny][nx]==0 && visited[ny][nx]==0){
visited[ny][nx] = 1;
queue.offer(new Pos(ny, nx));
}
}
}
}
static class Pos {
int y, x;
Pos(int y, int x) {
this.y = y;
this.x = x;
}
}
}
4. ์ฌ๋ด
์ํํฐ์ด๋ ํจ์จ์ ์ค์์ํ๋ ๋๋์ด๋ค.
๋งค์ผ ์๊ณ ๋ฆฌ์ฆ ํธ๋๊น ์ฌ๋ฐ๋ค. ์ฌ๋ฐ๋ ๋งํผ ์ค๋ ฅ๋ ๋นจ๋ฆฌ ๋๊ธฐ๋ฅผ ๋ฐ๋๋ค..
'Algorithm > Softeer' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Softeer] ์ ๊ดํ - Java (0) | 2023.05.11 |
---|---|
[Softeer] ๋น๋ฐ ๋ฉ๋ด - Java (0) | 2023.05.10 |
[Softeer] ์ฑ์ ํ๊ท - Java (0) | 2023.05.06 |
[Softeer] ์ฑ์ ํ๊ฐ - Java (2) | 2023.05.04 |
[Softeer] ๊ฐ์์ค ๋ฐฐ์ - Java (0) | 2023.04.29 |