Tags
- ๊น์ด ์ฐ์ ํ์
- ๋๋น ์ฐ์ ํ์
- ๋ฐฑํธ๋ํน
- DP
- Study
- ๊ทธ๋ํ ์ด๋ก
- ์ ์๋ก
- sort
- ์ํ
- ๊ต์ฌ
- Python
- Dynamic Programming
- greedy
- dfs
- stack
- BOJ
- queue
- ์๋ฃ๊ตฌ์กฐ
- PGM
- LV2
- CodingTest
- ์ ๋ ฌ
- SpringBoot
- Brute Force Algorithm
- ๋ฌธ์์ด
- Java
- ์๋ฎฌ๋ ์ด์
- ๊ทธ๋ํ ํ์
- BFS
- ๊ตฌํ
Archives
๊ธฐ๋ก๋ฐฉ
BOJ_2636 : ์น์ฆ ๋ณธ๋ฌธ
๐ธ ๋ฌธ์ ๋ถ์ ๐ธ
- H x W ๊ฒฉ์ ํ์ ์น์ฆ๊ฐ ์๋ค.
- ์น์ฆ๋ ๊ฐ์ฅ์๋ฆฌ์ ๋์ด์ง ์๋๋ค.
- ๊ณต๊ธฐ์ ์ ์ดํ ์น์ฆ๋ ํ ์๊ฐ ๋ค ๋ น์ ์์ด์ง๋ค.
- ์น์ฆ ์์๋ 1๊ฐ ์ด์์ ๊ตฌ๋ฉ์ด ์๋ค.
- ๊ตฌ๋ฉ ์์ ๊ณต๊ธฐ๋ ์ธ๋ถ ๊ณต๊ธฐ์ ์ ์ดํ๊ธฐ ์ ๊น์ง ์น์ฆ๋ฅผ ๋ น์ด์ง ์๋๋ค.
- ์น์ฆ๊ฐ ๋ชจ๋ ๋ น์ ์์ด์ง๋ ๋ฐ ๊น์ง ๊ฑธ๋ฆฐ ์๊ฐ๊ณผ ์ง์ ์น์ฆ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค.
- ๊ทธ๋ํ ํ์์ด๋ฏ๋ก BFSํน์ DFS๋ฅผ ์ฌ์ฉํ๋ค.
๐ธ ์ฝ๋ ๐ธ
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 {
private static class Point {
int r, c;
public Point(int r, int c) {
this.r = r;
this.c = c;
}
}
private static int H, W;
private static int[][] map;
private static int[] dx = {-1, 0, 1, 0};
private static int[] dy = {0, 1, 0, -1};
private static boolean[][] visited;
private static Queue<Point> que;
public static void main(String[] args) throws IOException {
// Input
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];
int cheese = 0;
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());
if (map[i][j] == 1) cheese++;
}
}
// DFS
que = new LinkedList<>();
visited = new boolean[H][W];
dfs(0, 0);
// BFS
int cnt = 0, size = 0;
while (!que.isEmpty()) {
cheese -= size;
size = que.size();
cnt++;
for (int i = 0; i < size; i++) {
Point point = que.poll();
int r = point.r;
int c = point.c;
map[r][c] = 2;
for (int j = 0; j < dx.length; j++) {
int x = point.r + dx[j];
int y = point.c + dy[j];
if (0 <= x && x < H && 0 <= y && y < W) {
if (map[x][y] == 1 && !visited[x][y]) {
visited[x][y] = true;
que.add(new Point(x, y));
}
else if(map[x][y] == 0)
dfs(x, y);
}
}
}
}
// Output
System.out.println(cnt);
System.out.println(cheese);
}
private static void dfs(int r, int c) {
map[r][c] = 2;
for (int i = 0; i < dx.length; i++) {
int x = r + dx[i];
int y = c + dy[i];
if (0 <= x && x < H && 0 <= y && y < W) {
if (map[x][y] == 1 && !visited[x][y]) {
visited[x][y] = true;
que.add(new Point(x, y));
} else if (map[x][y] == 0) {
dfs(x, y);
}
}
}
}
}
๐ธ ์ฝ๋ ํด์ ๐ธ
- ๋
น๊ธฐ ์ง์ ์น์ฆ๋ ํ์ ๋ด๋๋ค.
- ์ฒ์ ์ธ๋ถ ๊ณต๊ธฐ์ ๋ง๋ฟ์ ์น์ฆ๋ฅผ ๋ น์ฌ์ผ ํ๋ค.
- dfs๋ก 0,0 ๋ถํฐ ๋ง๋ฟ์ ๊ณต๊ธฐ๋ฅผ ๋ชจ๋ ํ์ํด์, ๊ทธ ์ฃผ๋ณ์ ์น์ฆ๋ฅผ ํ์ ๋ด๋๋ค.
- ํ์ธํ ๊ณต๊ธฐ๋ ๋์ด์ ์น์ฆ๋ฅผ ๋ น์ผ ์ผ์ด ์์ผ๋ฏ๋ก 2๋ฅผ ์ ์ฅํด๋๋ค.
- ํ๊ฐ ๋น๋๊น์ง ๊ณ์ฐ์ ๋ฐ๋ณตํ๋ค.
- ํ ์ฌ์ด์ฆ ๋งํผ ๋ฐ๋ณตํ๋ฉฐ ๋ น์ผ ์น์ฆ๋ฅผ ๊บผ๋ธ๋ค.
- ๋ น์ ์น์ฆ ์๋ฆฌ์๋ 2๋ฅผ ์ ์ฅํ๋ค.
- ์ฃผ๋ณ์ ์น์ฆ๊ฐ ์์ผ๋ฉด ๋ค์์ ๋ น์ผ ๊ฒ์ด๋ฏ๋ก ํ์ ๋ด๋๋ค.
- ์ฃผ๋ณ์ ๊ณต๊ธฐ๊ฐ ์๋ค๋ฉด ์น์ฆ๋ฅผ ๋ น์ผ ์ํ๊ฐ ๋ ๊ฒ์ด๋ฏ๋ก dfs๋ก ์ธ์ ํ ๊ณต๊ธฐ๋ฅผ ๋ชจ๋ ์ฐพ์ ๋ น์ผ ์น์ฆ๋ฅผ ํ์ ๋ด๋๋ค.
- ๊ณ์ฐ์ ๋ฐ๋ณตํ ํ ๊ฒฝ๊ณผ ์๊ฐ๊ณผ ์ง์ ์น์ฆ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค.
- ์น์ฆ ๊ฐ์๋ ์ฒ์ ์ ๋ ฅ ์ ์นด์ดํธํ๋ค๊ฐ, ํ์์ ๋ น์ผ ์น์ฆ๋ฅผ ๊บผ๋ผ ๋ ๋ง๋ค ์ฐจ๊ฐํ๋ค.
๐ธ end ๐ธ
- BFS์ DFS๋ฅผ ๋ ๋ค ์ฌ์ฉํด์ ํ์ดํ์ง๋ง, BFS๋ก๋ง ํต์ผํด์ ํ์์ด๋ ์ข์์ ๊ฒ ๊ฐ๋ค.
728x90
'CodingTest > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ_2239 : ์ค๋์ฟ (0) | 2023.04.06 |
---|---|
BOJ_17141 : ์ฐ๊ตฌ์ 2 (0) | 2023.04.06 |
BOJ_1600 : ๋ง์ด ๋๊ณ ํ ์์ญ์ด (0) | 2023.04.06 |
BOJ_10971 : ์ธํ์ ์ํ 2 (0) | 2023.04.06 |
BOJ_1010 : ๋ค๋ฆฌ ๋๊ธฐ (0) | 2023.04.06 |