๋ฌธ์
https://www.acmicpc.net/problem/10026
๋ด ๋ฌธ์ ํ์ด
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Arrays;
import java.util.Deque;
public class BOJ_10026 {
static int n, cnt;
static char[][] map, tmp;
static Deque<int[]> que = new ArrayDeque<>();
public static void dfs(int x, int y, char color) {
if(x < 0 || y < 0 || x >= n || y >= n) return;
if(color != tmp[x][y]) return;
tmp[x][y] = 'F'; // ์ค๋ณต ๋ฐฉ์ง
dfs(x, y-1, color);
dfs(x, y+1, color);
dfs(x-1, y, color);
dfs(x+1, y, color);
}
public static void main(String[] args) throws Exception {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
StringBuilder out = new StringBuilder();
n = Integer.parseInt(in.readLine());
map = new char[n][n];
for(int i = 0; i < n; i++) {
String str = in.readLine();
for(int j = 0; j < n; j++) {
map[i][j] = str.charAt(j);
}
}
tmp = new char[n][n];
for(int i = 0; i < n; i++) tmp[i] = Arrays.copyOf(map[i], n);
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
if(tmp[i][j] != 'F') {
dfs(i, j, tmp[i][j]);
cnt++;
}
}
}
out.append(cnt + " ");
cnt = 0;
for(int i = 0; i < n; i++) tmp[i] = Arrays.copyOf(map[i], n);
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
if(tmp[i][j] == 'G') tmp[i][j] = 'R';
}
}
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
if(tmp[i][j] != 'F') {
dfs(i, j, tmp[i][j]);
cnt++;
}
}
}
out.append(cnt);
System.out.println(out);
}
}
๐ DFS ๋ฌธ์
์ ๋ก์์ฝ์ด ์๋ ์ฌ๋์ ๊ธฐ์ค์ผ๋ก ๋จผ์ ํ์ธ ํ ์ ๋ก์์ฝ์ธ ์ฌ๋์ ๊ธฐ์ค์ผ๋ก ํ์ธํ๋ ์์ผ๋ก ๊ตฌํ
- map ๋ฐฐ์ด์ ๊ทธ๋๋ก ์ ์งํ๊ธฐ ์ํด์ tmp ๋ฐฐ์ด์ ๋ง๋ค๊ณ ๋ณต์ฌํด์ ์ฌ์ฉํ๋ค.
- ๋จผ์ ์ ๋ก์์ฝ์ด ์๋ ์ฌ๋์ ๊ธฐ์ค์ผ๋ก ํ์ธํ๋๋ฐ,
tmp ๋ฐฐ์ด์ ํ์ํ๋ฉด์ 'F'๊ฐ ์๋ ๊ฒฝ์ฐ dfs ๋ฉ์๋๋ฅผ ์คํํ๋๋ก ํ๋ค. - dfs ๋ฉ์๋์์๋ ํ์ํ๋ฉด์, ์ธ์ ํ๋ฉฐ ๊ฐ์ ๋ฌธ์๋ฅผ ๊ฐ์ง ๊ณณ๋ค์ ์ฐพ๊ณ
๊ทธ ๊ณณ๋ค์ ๋ชจ๋ 'F'๋ก ๋ฐ๊ฟ์ฃผ์ด ์ค๋ณต๋ ํ์์ ํ ์ ์๋๋ก ํด์ฃผ์๋ค. - ์์ ๊ฐ์ ์คํ์ ๋ฐ๋ณตํ๋ฉฐ ๊ทธ๋ฃน์ ๊ฐ์๋ฅผ ์ธ๊ณ , out์ cnt๋ฅผ ์ถ๊ฐํ ๋ค cnt๋ ๋ค์ 0์ผ๋ก ์ด๊ธฐํํ๋ค.
- ์ด์ ์ ๋ก์์ฝ์ธ ์ฌ๋์ ๊ธฐ์ค์ผ๋ก ํ์ธํ ์ฐจ๋ก์ด๋ฏ๋ก, ๋ค์ tmp์ map ๋ฐฐ์ด์ ๋ณต์ฌํด์ค ๋ค,
tmp๋ฅผ ํ์ํ๋ฉฐ 'G'์ธ ์๋ฆฌ๋ 'R'๋ก ๋ฐ๊ฟ์ฃผ์๋ค. (๊ฐ์ ์์ผ๋ก ์ธ์งํ๋ฏ๋ก) - ๊ทธ ๋ค์ ์์์ ์ ๋ก์์ฝ์ด ์๋ ์ฌ๋์ ๊ธฐ์ค์ผ๋ก ํ์ธํ๋ ๊ฒ๊ณผ ๊ฐ์ ๋์์ผ๋ก ํ์์ ์คํํ๋ค.
๐ก ํผ๋๋ฐฑ
- ๊ฐ๋จํ ๋ฌธ์ ์๋ค.!! ๊ทผ๋ฐ ์๊ฐํด๋ณด๋ ์ด์ฐจํผ 'F'๊ฐ ์๋ ๊ฒฝ์ฐ dfs๋ฅผ ์คํํ๋ 2์ค for๋ฌธ์
๊ฐ์ ์ฝ๋๋ฅผ ๋ ๋ฒ ๋ฐ๋ณตํ๋,, ๋ฉ์๋๋ก ๋ง๋ค์ด์ ์ฒ๋ฆฌํด์คฌ์ผ๋ฉด ๋ ๊น๋ํ์ ๊ฒ ๊ฐ๋ค.
'2๏ธโฃ Java > Problem Solving' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java Algorithm] ๋์ 2 BOJ #2294 (0) | 2022.08.31 |
---|---|
[Java Algorithm] ABCDE BOJ #13023 (0) | 2022.08.31 |
[Java Algorithm] ํ์ถ BOJ #3055 (0) | 2022.08.31 |
[Java Algorithm] ๋ น์ ์ท ์ ์ ์ ๊ฐ ์ ค๋ค์ง? (0) | 2022.08.31 |
[Java Algorithm] ๋ฏธ์ธ๋จผ์ง ์๋ ! BOJ #17144 (0) | 2022.08.31 |
๋๊ธ