https://www.acmicpc.net/problem/2667
์ฝ๋
import java.util.Arrays;
import java.util.Scanner;
public class Main {
static int[][] map = new int[25][25]; // ์ง์ ์กด์ฌ ์
๋ ฅํ 2์ฐจ์ ๋ฐฐ์ด
static boolean[][] visit = new boolean[25][25]; // ํ์ํ ์ง์ ๋ฐฉ๋ฌธ ์ฌ๋ถ ์ฒดํฌ
private static int[] dx = {0, -1, 0, 1}; // dx, dy = ์ํ์ข์ฐ
private static int[] dy = {-1, 0, 1, 0};
static int count = 1; // ๋ฐฉ๋ฌธํ ๋จ์ง ๋ฒํธ(์ฐ๊ฒฐ๋ ๋จ์ง๊ฐ ์๋๊ฒฝ์ฐ 1์ฉ ์ฆ๊ฐ)
static int N; // ์ง๋์ ํฌ๊ธฐ
// <- , ↑ , -> , ↓ ... ๋์๋จ๋ถ 4๋ฐฉํฅ ์ฒดํฌํด๊ฐ๋ฉฐ dfs ๋๋ฆฌ๊ธฐ
public static void dfs(int x, int y) {
map[x][y] = count; // ๋ฐฉ๋ฌธํ ์ง => count๋ก ํ์(1, 2, 3, ... ํ๋์ฉ ์ฆ๊ฐ)
visit[x][y] = true; // ๋ฐฉ๋ฌธํ ์ง => true ์ฒดํฌ
for(int i=0; i<4; i++) { // ์, ํ, ์ข, ์ฐ ์ฒดํฌ
int nx = x + dx[i];
int ny = y + dy[i];
// nx, ny = ์ขํ์ ๋ฒ์, N*N ํฌ๊ธฐ์ด๋ฏ๋ก x, y์ขํ๊ฐ 0๋ณด๋จ ์ปค์ผํ๊ณ N๋ณด๋จ ์์์ผํจ.
if(nx>=0 && ny>=0 && nx<N && ny<N) {
if(map[nx][ny] == 1 && visit[nx][ny] == false) {
dfs(nx, ny); // 1์ด๋ฉด์ ๋ฐฉ๋ฌธํ์ง ์์๊ณณ => dfs ๋๋ฆฌ๊ธฐ
}
}
}
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
N = scan.nextInt(); // ์ง๋์ ํฌ๊ธฐ
for(int i=0; i<N; i++) { // 2์ฐจ์ ํ๋ ฌ ์
๋ ฅ๋ฐ๊ธฐ
String str = scan.next();
for(int j=0; j<N; j++) {
map[i][j] = str.charAt(j) - '0';
}
}
for(int i=0; i<N; i++) {
for(int j=0; j<N; j++) {
if(map[i][j] == 1 && visit[i][j] == false) {
dfs(i, j); // 1์ด๋ฉด์ ๋ฐฉ๋ฌธํ์ง ์์๊ณณ => dfs ๋๋ฆฌ๊ณ ๋จ์ง์ ์นด์ดํธ
count ++; // dfs ์ฌ๊ท ํจ์๊ฐ ๋๋ ๋ => ํ์(์ธ์ )์ด ๋๋ฌ์ผ๋ฏ๋ก, ๋ค์ ์ธ์ ๋ ์ง์ ๋จ์ง ๋ฒํธ๋ฅผ +1 ํด์ค์ผ ํจ.
}
}
}
System.out.println(count-1); // ๋จ์ง์ ์ถ๋ ฅ
int[] arr = new int[count]; // ๋จ์ง์ ๋งํผ ์ง์ ์ ์ค์
for(int i=0; i<N; i++) {
for(int j=0; j<N; j++) {
if(map[i][j] != 0) { // ์ง์ด ์๋ ๊ณณ์ธ ๊ฒฝ์ฐ
arr[map[i][j]] ++; // ์ง์ด ์๋ map[i][j]์ ๊ฒฝ์ฐ count๋ก ์ ์ฅ๋์์ผ๋ฏ๋ก, ๋จ์ง ๋ฒํธ๊ฐ ์ ์ฅ๋๋ค.
}
}
}
Arrays.sort(arr);
for(int i=1; i<count; i++)
System.out.println(arr[i]); // ๊ฐ ๋จ์ง๋ฒํธ ๋ณ๋ก ๋จ์ง์ ์ถ๋ ฅ
scan.close();
}
}
ํ์ด
๊ทธ๋ํ - DFS, BFS์์ ์์ฉ๋ ๋ฌธ์ ์ด๋ค.
๋ค๋ฅธ ํ์ด๋ค์ ๋ณด๋ dfs, bfs ๋๊ฐ์ง ๋ฐฉ๋ฒ ๋ชจ๋ ํ์ ์๋๋ฐ, ๋ถ๋ฅ๊ฐ dfs๋ก ๋ผ์์ด์ dfs๋ก ํ์๋ค.
๋ฌธ์ ๋ฅผ ๋ณด๋ฉด 1์ ์ง์ด ์๋๊ณณ, 0์ ์ง์ด ์๋ ๊ณณ์ด๋ค.
์ฐ๊ฒฐ๋ ์ง๋ค์ ๋ชจ์์ธ ๋จ์ง๋ฅผ ์ ์ํ๊ณ , ๋จ์ง์ ๋ฒํธ๋ฅผ ๋ถ์ด๋๋ฐ
์ฐ๊ฒฐ๋์๋ค๋ ๊ฒ์ ์ด๋ ํ ์ง์ ์ํ์ข์ฐ์ค ํ๋์ ์ฐ๊ฒฐ๋์ด ์๋ ๊ฒฝ์ฐ๋ฅผ ๋งํ๋ค. (๋๊ฐ์ X)
์ฆ ์ง๋์์ ์ง์ด ์๋ ๊ณณ(1)์ธ ๊ธฐ์ ์ ๊ธฐ์ค์ผ๋ก dfs๋ฅผ ๋๋ฆฌ๋๋ฐ ์ด ๋ ์ํ์ข์ฐ๋ฅผ ๊ธฐ์ค์ผ๋ก dfs๋ฅผ ๋๋ฆฐ๋ค.
dfs๋ฅผ ๋๋ฆฐ ํ 1์ธ๊ฒฝ์ฐ ์ฌ๊ท๋ฅผ ํตํด ๊ณ์ ๋๋ฆฌ๊ณ , ๋ฐฉ๋ฌธํ์๋ฅผ ํ๋ค.
๊ทธ ํ dfs์ ํธ์ถ์ด ๋๋ฌ์ ๊ฒฝ์ฐ,, ๋ค์ ์ฐ๊ฒฐ๋ ์ง์ ์ฐพ๊ธฐ ์ํด ๋จ์ง ๋ฒํธ๋ฅผ ์ฆ๊ฐ์์ผ ์ค๋ค.
๊ธฐํ ์์ธํ ์ค๋ช ์ ์ฃผ์์ ํตํด ์ค๋ช ํ์ ....
์์ง ๊ทธ๋ํ๋ ์ฌ๊ทํจ์์ ๋ํ ์ดํด๊ฐ ์๋ฒฝํ์ง ์์ง๋ง, ๊ธฐ์กด dfs, bfs ์๋ฆฌ์์ ์์ฒญ ํฌ๊ฒ ์์ฉ์ด ๋์ง ์์๋ค.
๊ฐ ์ฝ๋๊ฐ ์ดํด๋ ๋์ง๋ง ์ง์ ๊ตฌํํ๊ธฐ๋ ์ข ๋ฒ๊ฑฐ์ธ ๊ฒ ๊ฐ๋ค. ๋ค์ํ ๊ทธ๋ํ ๋ฌธ์ ๋ค ํ๋ฉด์ ์ดํดํ๊ณ ์์ฉํด๋ด์ผ๊ฒ ๋ค .
์ฐธ๊ณ ํ ์ฌ์ดํธ
https://ldgeao99.tistory.com/400
- dfs, bfs ์์ฉ ๋ฌธ์ ๋ค ํด์ค
https://pangsblog.tistory.com/28
- ๋ฌธ์ ํ์ด๊ฐ ์ดํดํ๊ธฐ ์ฝ๊ฒ ์ ๋์ด์์.
https://justgo-developer.tistory.com/49
- ์ฐธ๊ณ ํ ์ฝ๋
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 9625๋ฒ: BABBA(DP) (0) | 2020.02.04 |
---|---|
[๋ฐฑ์ค] 1783๋ฒ: ๋ณ๋ ๋์ดํธ(๊ทธ๋ฆฌ๋, ๊ตฌํ) (0) | 2020.02.04 |
[๋ฐฑ์ค] 1049๋ฒ: ๊ธฐํ์ค(๊ทธ๋ฆฌ๋, ๊ตฌํ) (0) | 2020.02.03 |
[๋ฐฑ์ค] 1543๋ฒ: ๋ฌธ์ ๊ฒ์(๊ทธ๋ฆฌ๋, ์์ ํ์) (0) | 2020.02.03 |
[๋ฐฑ์ค] 2399๋ฒ: ๊ฑฐ๋ฆฌ์ ํฉ (0) | 2020.01.29 |
๋๊ธ