๐ ๋ฌธ์
๐ ์์ด๋์ด
๊ธฐ๋ณธ์ ์ธ ๊ตฌํ ๋ฌธ์ ์ด๋ค.
DFS/ BFS ๋ ๊ฐ์ง๋ก ๋ชจ๋ ํ ์ ์์ง๋ง ๋๋ BFS๋ฅผ ์ด์ฉํด์ ํ์ดํ์๋ค.
๊ฐ ์ ์๋ ๊ธธ์ด ๋๊ฐ์ ์ ํฌํจํจ์ผ๋ก ๊ฒฝ๋ก์ ์ถ๊ฐํ๋ค. ๋ํ ๋ชจ๋ ์ฌ์ ์ฐพ์์ผ ํ๊ธฐ์ ๋ชจ๋ ๋ฐฐ์ด์ ํ์ํ๋ฉด์ ์ด๋ฏธ ๋ฐฉ๋ฌธํ์ง ์์ ์ฌ์ ๊ฒฝ์ฐ์ ํ์์ ์์ํ๊ณ ํด๋น์ฌ์ BFS๋ก ์ํํ๋ฉด์ visit ๋ฐฐ์ด์ ์์น ํ๋ฉด ๋๋ค.(๋ฐฉ๋ฌธ์ฒ๋ฆฌ๋ฅผ ํ๋ค)
์ฆ, ๋ชจ๋ ์ง๋๋ฅผ ํ์ํ๋ฉด์ 1๋ฒ ์ฌ์ ๋ง๋ ๊ฒฝ์ฐ 1๋ฒ ์ฌ์ ๋ํด visit์ ๋ชจ๋ ์น ํ๊ณ , 2๋ฒ ์ฌ์ ๋ง๋ ๊ฒฝ์ฐ 2๋ฒ ์ฌ์ ์์ญ์ ๋ํ visit์ ๋ชจ๋ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ ํ๋ฉด์ ๋ชจ๋ ์ฌ์ ๊ฐ์๋ฅผ ๊ตฌํ๋ฉด ๋๋ค.
๐ ํ์ด
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 int w, h;
private static int[][] map;
private static boolean[][] visited;
private static final Queue<int[]> queue = new LinkedList<>();
private static final int[][] dirs = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}, {-1, 1}, {-1, -1}, {1, -1}, {1, 1}};
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
StringBuilder sb = new StringBuilder();
while (true) {
st = new StringTokenizer(br.readLine());
w = Integer.parseInt(st.nextToken());
h = Integer.parseInt(st.nextToken());
if (w == 0 && h == 0) break;
map = new int[h][w];
visited = new boolean[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());
}
}
sb.append(findLands()).append("\n");
}
System.out.println(sb);
}
public static int findLands() { //๋ชจ๋ ์ฌ ํ์
int cnt = 0;
for (int i = 0; i < h; i++) {
for (int j = 0; j < w; j++) {
if (!visited[i][j] && map[i][j] == 1) {
coloredLands(new int[]{i, j});
cnt++;
}
}
}
return cnt;
}
private static void coloredLands(int[] point) { //ํ ์ฌ์ ๋ง๋๊ฒฝ์ฐ ๋๋จธ์ง ์ฌ์ ์์ญ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ
visited[point[0]][point[1]] = true;
queue.add(point);
while (!queue.isEmpty()) {
int[] p = queue.poll();
for (int[] dir : dirs) {
int mvX = p[0] + dir[0];
int mvY = p[1] + dir[1];
if (mvY < 0 || mvX < 0 || h <= mvX || w <= mvY || visited[mvX][mvY] || map[mvX][mvY] == 0) continue;
visited[mvX][mvY] = true;
queue.add(new int[]{mvX, mvY});
}
}
}
}
'๋ฐฑ์ค(boj)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JAVA]1063 ํน, ๊ตฌํ, ์ค๋ฒ3 (0) | 2023.05.31 |
---|---|
[JAVA]17143 ๋์์ (1) | 2023.05.29 |
[JAVA]2758 ๋ก๋(dfs ์๊ฐ์ด๊ณผ/ dp) (0) | 2023.05.28 |
[JAVA]1092 ๋ฐฐ ( ์ด๋ถ ํ์ ) (0) | 2023.05.23 |
[JAVA]22862 ๊ฐ์ฅ ๊ธด ์ง์ ์ฐ์ํ ๋ถ๋ถ์์ด (0) | 2023.05.18 |