๋ฐ์ํ
๋ฌธ์ Silver1
https://www.acmicpc.net/problem/2667
2667๋ฒ: ๋จ์ง๋ฒํธ๋ถ์ด๊ธฐ
<๊ทธ๋ฆผ 1>๊ณผ ๊ฐ์ด ์ ์ฌ๊ฐํ ๋ชจ์์ ์ง๋๊ฐ ์๋ค. 1์ ์ง์ด ์๋ ๊ณณ์, 0์ ์ง์ด ์๋ ๊ณณ์ ๋ํ๋ธ๋ค. ์ฒ ์๋ ์ด ์ง๋๋ฅผ ๊ฐ์ง๊ณ ์ฐ๊ฒฐ๋ ์ง์ ๋ชจ์์ธ ๋จ์ง๋ฅผ ์ ์ํ๊ณ , ๋จ์ง์ ๋ฒํธ๋ฅผ ๋ถ์ด๋ ค ํ๋ค. ์ฌ
www.acmicpc.net
ํ์ด
์ฌ๋ฐฉํ์ ์ค ๊น์ด์ฐ์ ํ์(DFS)๋ฅผ ์ฌ์ฉํ์ฌ ํด๊ฒฐ
๊ธฐ๋ณธ DFS์ฝ๋์ ๋จ์ง ๋ด ์ง์ ์๋ฅผ ์ ์ฅ ํ cnt๋ฐฐ์ด์ ์ถ๊ฐํ์๋ค.
๋ฐ๋ก ๋ฐฐ์ด์ ๋ง๋ค์ด ์ค ์ด์ ๋ ๋ง์ง๋ง์ sort๋ฅผ ํด์ผํ๊ธฐ ๋๋ฌธ.
์ฝ๋
๋๋ณด๊ธฐ
import java.io.*;
import java.util.*;
public class Main{
static int N, idx;
static int[][] arr;
static int[] cnt;
static boolean[][] visited;
static int[] di = {-1,1,0,0};
static int[] dj = {0,0,-1,1};
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
arr = new int[N][N];
cnt = new int[N*N];
visited = new boolean[N][N];
idx = 0;
for(int i =0 ; i < N ; i++) {
String str = br.readLine();
for(int j =0 ; j < N ; j++) {
arr[i][j] = str.charAt(j)-'0';
}
}
for(int i =0 ; i < N ; i++) {
for(int j = 0 ; j < N ; j++) {
if(arr[i][j] == 1 && !visited[i][j]) {
dfs(i, j);
idx++;
}
}
}
cnt = Arrays.copyOf(cnt, idx);
Arrays.sort(cnt);
System.out.println(idx);
for(int i =0 ; i < idx ; i++) {
System.out.println(cnt[i]);
}
}
public static void dfs(int ci, int cj) {
cnt[idx] ++;
visited[ci][cj] = true;
for(int i =0 ; i < 4 ; i++) {
int ni = ci+di[i];
int nj = cj+dj[i];
if(0<=ni&&ni<N && 0<=nj&&nj<N && arr[ni][nj] == 1 && !visited[ni][nj]) {
dfs(ni, nj);
}
}
}
}
๋ฐ์ํ
'๐ ์๊ณ ๋ฆฌ์ฆ > GraphTraversal' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 3184๋ฒ ์ (Java) (0) | 2022.02.16 |
---|---|
[๋ฐฑ์ค] 5427๋ฒ ๋ถ (Java) (0) | 2022.02.08 |
[๋ฐฑ์ค] 2606๋ฒ ๋ฐ์ด๋ฌ์ค (Java) (0) | 2021.08.24 |
[๋ฐฑ์ค] 10026๋ฒ ์ ๋ก์์ฝ(Java) (0) | 2021.08.20 |
[๋ฐฑ์ค]3109๋ฒ ๋นต์ง(Java) (0) | 2021.08.19 |