๋ฌธ์ Gold5
https://www.acmicpc.net/problem/10026
10026๋ฒ: ์ ๋ก์์ฝ
์ ๋ก์์ฝ์ ๋นจ๊ฐ์๊ณผ ์ด๋ก์์ ์ฐจ์ด๋ฅผ ๊ฑฐ์ ๋๋ผ์ง ๋ชปํ๋ค. ๋ฐ๋ผ์, ์ ๋ก์์ฝ์ธ ์ฌ๋์ด ๋ณด๋ ๊ทธ๋ฆผ์ ์๋ ์ฌ๋์ด ๋ณด๋ ๊ทธ๋ฆผ๊ณผ๋ ์ข ๋ค๋ฅผ ์ ์๋ค. ํฌ๊ธฐ๊ฐ N×N์ธ ๊ทธ๋ฆฌ๋์ ๊ฐ ์นธ์ R(๋นจ๊ฐ), G(์ด๋ก)
www.acmicpc.net
ํ์ด
๊ฐ์ ์์ด ์ํ์ข์ฐ ํ๊ณณ์ด๋ผ๋ ์ธ์ ํด์์ผ๋ฉด ๊ฐ์ area๋ก ๋๋ฏ๋ก,
๊น์ด์ฐ์ ํ์์ ํตํด ๊ฐ์ ๊ตฌ์ญ์ ํ์ธํ๋ค.
๋ฌธ์ ์์ '๊ฐ์ ์์์ด ์ํ์ข์ฐ๋ก ์ธ์ ํด ์๋ ๊ฒฝ์ฐ'๋ผ๊ณ ๋์ด ์์ด์ ์ํ์ข์ฐ์ ๋ชจ๋ ์ธ์ ํด์์ด์ผ ํ๋ค๊ณ ์๊ฐํ์๋ค...โ|๏ฝO′|โ
์ผ๋ฐ์ธ์ด ๋ณด๋ ๊ตฌ์ญ์ ํ์ธํ๊ธฐ ์ํด ์ ๋ ฅ๋ฐ์ ๋ฐฐ์ด ๊ทธ๋๋ก DFS๋ฅผ ๋๋ฆฐ๋ค.
DFS๋ฅผ ๋๋ฆฌ๋ฉด์, 'G'์์ ๋ง๋๋ฉด ํด๋น ์ธ๋ฑ์ค์ ๋ํ ์ฐ์ฐ์ด ๋ชจ๋ ๋๋ ํ 'R'๋ก ๋ฐ๊ฟ์ค๋ค.
์ ๋ก์์ฝ์ผ ๋์ ํ์์ ์ํด์!
๊ทธ ํ, ๋ค์ ๋๊ฐ์ ๋ฉ์๋๋ก ์ ๋ก์์ฝ DFS๋ฅผ ๋๋ฆฌ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ค.
์ฝ๋
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main{
static int[] di = {-1,1,0,0};
static int[] dj = {0,0,-1,1};
static int N;
static char[][] color;
static boolean[][] visited;
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
N = Integer.parseInt(br.readLine());
color = new char[N][N];
visited = new boolean[N][N];
int res = 0;
for(int i =0 ; i < N ; i++) {
String str = br.readLine();
for(int j =0 ; j < N ; j++) {
color[i][j] = str.charAt(j);
}
}
//์ ๋ก์์ฝ์ด ์๋ ๋, ๊ตฌ์ญ ๊ฐ์
for(int i =0 ; i < N ; i++) {
for(int j =0 ; j < N ; j++) {
if(!visited[i][j]) {
area(i,j);
res++;
}
}
}
sb.append(res).append(" ");
res = 0;
visited = new boolean[N][N];
//์ ๋ก์์ฝ์ผ ๋, ๊ตฌ์ญ ๊ฐ์
for(int i =0 ; i < N ; i++) {
for(int j =0 ; j < N ; j++) {
if(!visited[i][j]) {
area(i,j);
res++;
}
}
}
sb.append(res);
System.out.println(sb.toString());
}
public static void area(int i, int j) { //๊น์ด์ฐ์ ํ์
visited[i][j] = true;
for(int d = 0; d< 4; d++) {
int ni = i + di[d];
int nj = j + dj[d];
if(0<=ni && ni<N && 0<=nj && nj<N && !visited[ni][nj] && color[i][j] == color[ni][nj]) {
area(ni, nj);
}
}
if(color[i][j] == 'G') color[i][j] = 'R'; //์ผ๋ฐ์ธ > ์ ๋ก์์ฝ ์์ผ๋ก ๊ฒ์ฌํ๋ฏ๋ก ์ผ๋ฐ์ธ ๊ฒ์ฌ ์์ G์ ๋ค R๋ก ๋ฐ๊ฟ ์ ๋ก์์ฝ ๊ฒ์ฌ๋ฅผ ์ํด ์
ํ
ํ๋ค.
}
}
'๐ ์๊ณ ๋ฆฌ์ฆ > GraphTraversal' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 3184๋ฒ ์ (Java) (0) | 2022.02.16 |
---|---|
[๋ฐฑ์ค] 5427๋ฒ ๋ถ (Java) (0) | 2022.02.08 |
[๋ฐฑ์ค] 2606๋ฒ ๋ฐ์ด๋ฌ์ค (Java) (0) | 2021.08.24 |
[๋ฐฑ์ค] 2667๋ฒ ๋จ์ง๋ฒํธ๋ถ์ด๊ธฐ (Java) (0) | 2021.08.24 |
[๋ฐฑ์ค]3109๋ฒ ๋นต์ง(Java) (0) | 2021.08.19 |