ํ๋๋ง๋ค ์๋กญ๋ค. ์ ๊ธฐํ๋ค.
๋ค ๋ฐฉํฅ์ ์๋ค ๊ฐ๋ค ํ ์ ์๋๋ก 2์ฐจ์ int๋ฐฐ์ด์ ๋ง๋ค์ด์ for๋ฌธ์ผ๋ก ํ๋์ฉ que
์ ๋ด์์ฃผ๋ ๋ถ๋ถ์ด ํญ์ ํท๊ฐ๋ฆฐ๋ค.
int[][] dir = { {0,1}, {0,-1}, {1,0}, {-1,0} };
BFS์์๋ que
์์์ if๋ฌธ์ ์กฐ๊ฑด์ ์ ๋๋ก ์ธ์ฐ๋ ๋จ๊ณ๊ฐ ์ ์ผ ๊น๋ค๋กญ๊ฒ ๋๊ปด์ง๋ค.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java.util.Queue;
public class Main2667_๋จ์ง๋ฒํธ๋ถ์ด๊ธฐ {
static int N;
static int[][] map;
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().trim());
map = new int[N][N];
visited = new boolean[N][N];
String[] str;
for(int n=0;n<N;n++) {
str = br.readLine().trim().split("");
for(int m=0;m<N;m++) {
map[n][m] = Integer.parseInt(str[m]);
}
}
//bfs ๋ฉ์๋๋ฅผ ํตํด์ map[][]์ ๋จ์ง๋ฒํธ๋ฅผ ๋ถ์ธ๋ค
//danjiNum = 1์ ํ ๋ค์์, ์ค์ ๋ก๋ 2๋ถํฐ ์์ํ๋๋ก ํ๋ค
//๋จ์ง๊ฐ ์๊ณ ์๊ณ ์ ์ฌ๋ถ๋ฅผ ์ฒดํฌํ๋ 1์ด๋ ๊ฒน์น๋ฉด ์๋๋๊น!
int danjiNum = 1;
for(int x=0;x<N;x++) {
for(int y=0;y<N;y++) {
if(map[x][y]==1 && !visited[x][y]) {
danjiNum ++;
bfs(x,y,danjiNum);
}
}
}
//map[]์ ๋ค์ ๋๋ฉด์ ๊ฐ danjiNum๋ง๋ค ๋ช ๊ฐ์ ๋จ์ง๊ฐ ํฌํจ๋์ด ์๋์ง ์นด์ดํธํ๋ค
//์ด๋ ๋จ์ง๋ฒํธ๋ 2๋ฒ๋ถํฐ ์์ํ๋ฏ๋ก
int[] cntDanji = new int[danjiNum+2];
for(int n=0;n<N;n++) {
for(int m=0;m<N;m++) {
if(map[n][m]>1) cntDanji[map[n][m]]++;
}
}
ArrayList<Integer> list = new ArrayList<Integer>();
for(int i=2;i<=danjiNum;i++) {
list.add(cntDanji[i]);
}
Collections.sort(list);
sb.append(danjiNum-1+"\n");
for (Integer i : list) {
sb.append(i+"\n");
}
System.out.println(sb.toString().trim());
}
private static void bfs(int x, int y, int danjiNum) {
visited[x][y] = true;
map[x][y] = danjiNum;
Queue<int[]> que = new LinkedList<int[]>();
que.add(new int[] {x,y});
int[] tmp;
int tmpX, tmpY;
int newX, newY;
while(!que.isEmpty()) {
tmp = que.poll();
tmpX = tmp[0];
tmpY = tmp[1];
int[][] dir = { {0,1}, {0,-1}, {1,0}, {-1,0} };
for(int d=0;d<4;d++) {
newX = tmpX + dir[d][0];
newY = tmpY + dir[d][1];
if(newX>=0 && newX<N && newY>=0 && newY<N
&& !visited[newX][newY] && map[newX][newY]==1) {
visited[newX][newY] = true;
map[newX][newY] = danjiNum;
que.offer(new int[] {newX, newY});
}
}
}
}
}
'์๊ณ ๋ฆฌ์ฆ > ๋ฌธ์ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๋ฐ] ๋ฐฑ์ค 1753 - ์ต๋จ๊ฒฝ๋ก (0) | 2020.12.06 |
---|---|
[์๋ฐ] ๋ฐฑ์ค 1012 - ์ ๊ธฐ๋ ๋ฐฐ์ถ (0) | 2020.12.06 |
[์๋ฐ] ๋ฐฑ์ค 2606 - ๋ฐ์ด๋ฌ์ค (0) | 2020.12.05 |
[์๋ฐ] ๋ฐฑ์ค 1260 - DFS์ BFS (0) | 2020.12.05 |
[์๋ฐ] ๋ฐฑ์ค 9372 - ์๊ทผ์ด์ ์ฌํ (0) | 2020.12.04 |