Tags
- ๋ฌธ์์ด
- SpringBoot
- ๊ทธ๋ํ ํ์
- ๊ตฌํ
- PGM
- queue
- Brute Force Algorithm
- sort
- stack
- ๋๋น ์ฐ์ ํ์
- ์๋ฎฌ๋ ์ด์
- BFS
- Study
- ๋ฐฑํธ๋ํน
- ์ํ
- greedy
- Dynamic Programming
- Python
- ๊ต์ฌ
- CodingTest
- Java
- ์ ์๋ก
- BOJ
- ๊ทธ๋ํ ์ด๋ก
- dfs
- ๊น์ด ์ฐ์ ํ์
- ์๋ฃ๊ตฌ์กฐ
- ์ ๋ ฌ
- LV2
- DP
Archives
๊ธฐ๋ก๋ฐฉ
BOJ_2638 : ์น์ฆ ๋ณธ๋ฌธ
๐ธ ๋ฌธ์ ๋ถ์ ๐ธ
- N x M ๋ชจ๋์ข ์ด์ ๊ณต๊ธฐ์ ์น์ฆ๊ฐ 0, 1 ๋ก ์ฃผ์ด์ง๋ค.
- ์ธ๋ถ ๊ณต๊ธฐ์ 2๊ฐ ์ด์ ๋ง๋ฟ์ ์น์ฆ๋ ๋ น๋๋ค.
- ์น์ฆ๊ฐ ๋ชจ๋ ๋ น๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ๊ตฌํ๋ค.
๐ธ ๋ฌธ์ ํ์ด ๐ธ
- ์น์ฆ ๋ด๋ถ์ ๊ณต๊ธฐ์ ์ธ๋ถ ๊ณต๊ธฐ๋ฅผ ๋ถ๋ฆฌํด์ ์๊ฐํ๋ค.
- ๊ฐ์ฅ์๋ฆฌ ๋ฉด์ ์น์ฆ๋ฅผ ๋์ง ์๋๋ค๊ณ ๋ฌธ์ ์์ ์ ํํ์ผ๋ฏ๋ก, (0,0)๋ถํฐ ๊ทธ๋ํ ํ์์ผ๋ก ์ธ์ ํ 0์ 2๋ก ๋ฐ๊พผ๋ค.
- ํ์ด์์ DFS๋ฅผ ์ฌ์ฉํ๋ค.
- ๊ณต๊ธฐ์ ๋ง๋ฟ์ ์น์ฆ๋ฅผ ๋
น์ฌ ์์ค๋ค.
- ์น์ฆ๊ฐ ๋ น์ ์๋ฆฌ๋ ๊ณต๊ธฐ๋ฅผ ์ฑ์ฐ๋๋ฐ, ๊ฐ์ ์๊ฐ์ ๋ น๋ ๋ค๋ฅธ ์น์ฆ๋ค์ ์ํฅ์ ์ฃผ์ง ์๋๋ก, 0์ผ๋ก ๋ฐ๊พผ๋ค.
- ๊ฐ์ ์๊ฐ์ ๋ชจ๋ ์น์ฆ๋ฅผ ํ์ธํ ๋ค, ์ธ๋ถ ๊ณต๊ธฐ 2์ ์ธ์ ํ ๊ณต๊ธฐ 0์ ๋ชจ๋ 2๋ก ๋ฐ๊พผ๋ค.
- ์น์ฆ๊ฐ ๋ชจ๋ ๋ น์ ๋ ๊น์ง ๋ฐ๋ณตํ๋ค.
๐ธ ์ฝ๋ ๐ธ
import java.io.*;
import java.util.ArrayDeque;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main {
private static final int[] dx = {-1, 0, 1, 0};
private static final int[] dy = {0, 1, 0, -1};
private static int N, M, map[][];
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
map = new int[N][M];
Queue<Point> que = new ArrayDeque<>();
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());
if (map[i][j] == 1) que.add(new Point(i, j));
}
}
air_dfs(0, 0);
int answer = 0;
while (!que.isEmpty()) {
int size = que.size();
for (int i = 0; i < size; i++) {
Point point = que.poll();
int cnt = 0;
for (int j = 0; j < 4; j++) {
int row = point.r + dx[j];
int col = point.c + dy[j];
if (0 <= row && row < N && 0 <= col && col < M && map[row][col] == 2) {
cnt++;
}
}
if (cnt > 1) {
map[point.r][point.c] = 0;
} else {
que.add(point);
}
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
if (map[i][j] == 2)
air_dfs(i, j);
}
}
answer++;
}
bw.write(Integer.toString(answer));
bw.flush();
}
private static void air_dfs(int r, int c) {
map[r][c] = 2;
for (int i = 0; i < 4; i++) {
int row = r + dx[i];
int col = c + dy[i];
if (0 <= row && row < N && 0 <= col && col < M && map[row][col] == 0) {
air_dfs(row, col);
}
}
}
private static class Point {
int r, c;
public Point(int r, int c) {
this.r = r;
this.c = c;
}
}
}
๐ธ ์ฝ๋ ํด์ ๐ธ
- ์ขํ๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ํด๋์ค Point๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํ๋ค.
- DFS๋ก ์ธ๋ถ๊ณต๊ธฐ์ ๋ฐ์ ํ ๊ณต๊ธฐ๋ค์ 0์์ 2๋ก ๋ง๋ค์ด์ฃผ๋ ๋ฉ์๋ air_dfs()๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํ๋ค.
- ๊ฐ์ ์๊ฐ์ ๋
น์ ์น์ฆ๋ฅผ ํ๋ฅผ ์ด์ฉํด ํ๋ณํ๋ค.
- ์ธ์ ํ ์ธ๋ถ๊ณต๊ธฐ๊ฐ 2๊ฐ ์ด์์ธ ์น์ฆ๋ ๊ณต๊ธฐ(0) ์ผ๋ก ๋ง๋ ๋ค.
- 2๊ฐ ๋ฏธ๋ง์ด๋ผ๋ฉด, ์น์ฆ ์ํ์ด๋ฏ๋ก ํ์ ๋ค์ ๋ฃ๋๋ค.
- ์ธ๋ถ ๊ณต๊ธฐ(2)์ ์ธ์ ํ ๊ณต๊ธฐ(0)์ air_dfs() ๋ฉ์๋๋ฅผ ํตํด ๋ชจ๋ 2๋ก ๋ง๋ค์ด ์ค๋ค.
- ์น์ฆ๊ฐ ๋ชจ๋ ์์ด์ง ๋ ๊น์ง ๋ฐ๋ณตํ๋ค.
- ์น์ฆ๊ฐ ๋ชจ๋ ๋ น๋๋ฐ ๊ฑธ๋ฆฐ ์๊ฐ์ ์นด์ดํธํ ๋ณ์ answer๋ฅผ ์ถ๋ ฅํ๋ค.
๐ธ end ๐ธ
- ๊ณจ๋ 3์น๊ณ ๋ ๊ฐ๋จํ ๊ทธ๋ํ ํ์ ๋ฌธ์ ์๋ค.
- ๊ณต๊ธฐ ํ์์ ๋ญ๋ ์๊ด ์์ ๊ฒ ๊ฐ์์, ๊ตฌํ์ด ๋น๊ต์ ๊ฐ๋จํ DFS๋ฅผ ์ด์ฉํ๋ค.
- ๋ น์ ์น์ฆ ๊ด๋ฆฌ๋ BFS๋ฅผ ์จ์ผ ํ ์ค ์์๋๋ฐ, ๊ทธ๋ฅ ํ๋ฅผ ์ด์ฉํ๋ ๋๋์ด์๋ค.
- ์ธ์ ๊ณต๊ธฐ 0์ ์ธ๋ถ ๊ณต๊ธฐ 2๋ก ๋ฐ๊ฟ์ฃผ๋ ๋ถ๋ถ์์ 0์ ์ฐพ์ผ๋ฉด ๋ฐ๋ก 2๋ก ๋ฐ๊พธ๋๋ก ํ๋๋ฐ, ์น์ฆ ์ ๊ณต๊ธฐ๊น์ง ๋ณํด์ ํ๋ ธ๋ค.
- 2๋ฅผ ์ฐพ์์ ์ธ์ 0์ ์ฐพ์ ๋ณ๊ฒฝํ๋ ๋ฐฉ์์ผ๋ก ์ธ๋ถ ๊ณต๊ธฐ์ ์ธ์ ํ 0์ ์ฐพ์ ๋ฐ๊ฟ์ ๋ง์ ์ ์์๋ค.
728x90
'CodingTest > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ_11404 : ํ๋ก์ด๋ (0) | 2024.01.31 |
---|---|
BOJ_1517 : ๋ฒ๋ธ ์ํธ (0) | 2024.01.26 |
BOJ_5639 : ์ด์ง ๊ฒ์ ํธ๋ฆฌ (0) | 2023.12.15 |
Lv.2 : ์ฐ์๋ ๋ถ๋ถ ์์ด์ ํฉ (0) | 2023.11.30 |
Lv.2 : ์๊ฒฉ ์์คํ (0) | 2023.11.29 |