1. ๋ฌธ์ ์ค๋ช
2. ์ ๊ทผ ๋ฐฉ์
KEY WORD
: BFS
2์ฐจ์ ๋ฐฐ์ด์ ๊ฐ์ ๋ด๋๋ค.
๋ฒํธ ๋ณ๋ก ์๋ฏธ๊ฐ ์๋ค. (0
= ๋ฒฝ, 1
= ๋ฏธ๋ฐฉ๋ฌธํ ์ํํธ ๋จ์ง, 2
= ๋ฐฉ๋ฌธํ ๋จ์ง)
(1) 2์ฐจ์ ๋ฐฐ์ด์ ์ํํ๋ค๊ฐ ๊ฐ == 1์ธ ๊ฒ์ ๋ง๋๋ฉด, ํด๋น ๊ฐ์ ์์์ผ๋ก BFS๋ฅผ ๋๋ฆฐ๋ค.
- ํ์ฌ ๊ฐ์ ์ฌ๋ฐฉ์ ํ์ํ๋ค.
- ์ฌ๋ฐฉ์ ๊ฐ ์ค 1์ธ ๊ฐ์ด ์์ผ๋ฉด ํ์ ๋ฃ๊ณ , ํด๋น ์์น์ ๊ฐ์ 2๋ก ๋ฐ๊พผ๋ค.
- ํ๊ฐ ๋น ๋ ๊น์ง (๋ ์ด์ ์ฌ๋ฐฉ ํ์์ ํด๋ ๊ฐ = 1์ด ์ ๋์ฌ ๋ ๊น์ง) ๋ฐ๋ณตํ๋ค.
(2) 1๋ฒ์ ์ฒซ ์กฐํ์์ ๋ง๋ ์ํํธ์ ์ํํธ ๋จ์ง ์ ์ฒด๋ฅผ ํ๋ฒ์ ๋ณด๋ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ 1๋ฒ์ ๋ฐ๋ณต ํ์๊ฐ ๊ณง ์ํํธ์ ๊ฐ์์ด๋ค.
(3) ์ํํธ ๋จ์ง๋ฅผ ๋จ์ง๋ด ์ํํธ์ ๊ฐ์์ ๋ฐ๋ผ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ค.
3. ์ฝ๋ ๋ถ์
import java.io.*;
import java.util.*;
public class Main {
// ๊ฐ ์ ์ฅ
static int [][] arr;
// ์ฌ๋ฐฉ ํ์์ฉ
static int [] idx = new int[]{-1,0,1,0};
static int [] idy = new int[]{0,1,0,-1};
// ์ํํธ ๋จ์ง ๊ฐ์์ฉ
static int cnt = 0;
public static void main(String[] args) throws IOException {
// ์
๋ ฅ ๋ฐ๊ธฐ
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
ArrayList<Integer> list = new ArrayList<>();
int N = Integer.parseInt(br.readLine());
arr = new int[N][N];
for(int i = 0; i < N; i++){
String s = br.readLine();
for (int j = 0; j < N; j++) {
arr[i][j] = s.charAt(j) - 48;
}
}
// ๋ฐฐ์ด์ ์กฐํ ํ์ ๋, ๊ฐ์ด 1์ธ ๊ฐ์ ๋ง๋๋ฉด ๊ทธ ๊ฐ์ ๊ธฐ์ค์ผ๋ก BFS ๋๋ฆฌ๊ธฐ
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if(arr[i][j] == 1){
cnt++;
list.add(bfs(new Coordinate(i,j)));
}
}
}
// ๊ฐ๋ค์ ์ํํธ ๊ฐ์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
Collections.sort(list);
System.out.println(cnt);
for(int temp: list){
System.out.println(temp);
}
}
public static int bfs(Coordinate now) {
// ๊ณตํฐ: 0, ๋ฏธ๋ฐฉ๋ฌธ ๋จ์ง: 1, ๋ฐฉ๋ฌธํ ๋จ์ง: 2
// ํ์ฌ ํ์ ์ค์ธ ์ํํธ๋จ์ง์ ์ํํธ ๊ฐฏ์ ์นด์ดํธ
int apart_cnt = 1;
ArrayDeque<Coordinate> aq1 = new ArrayDeque<>();
// ์ฒซ ์กฐํํ ์ํํธ๋ฅผ ์ง์ด ๋ฃ๊ธฐ
aq1.add(now);
// ๋ฐฉ๋ฌธ ํ์
arr[now.x][now.y] = 2;
while(!aq1.isEmpty()) {
Coordinate cur = aq1.poll();
// ์ฌ๋ฐฉ ํ์
for (int i = 0; i < 4; i++) {
int nx = cur.x + idx[i];
int ny = cur.y + idy[i];
// ๋ฐฐ์ด ๋ฒ์ ์์ด๊ณ , ๋ฏธ๋ฐฉ๋ฌธํ ์ํํธ๋ผ๋ฉด,
if(nx>=0 && ny>= 0 && nx< arr.length && ny < arr.length){
if(arr[nx][ny] == 1) {
// ๋ฐฉ๋ฌธ์ฒ๋ฆฌ ํ์ ํด๋น ์ํํธ๋ฅผ ๊ธฐ์ ์ผ๋ก 4๋ฐฉ ํ์ํ๊ธฐ ์ํด queue์ ๋ฃ๋๋ค.
arr[nx][ny] = 2;
aq1.add(new Coordinate(nx,ny));
apart_cnt++;
}
}
}
}
return apart_cnt;
}
}
class Coordinate {
int x;
int y;
public Coordinate (int x, int y) {
this.x = x;
this.y = y;
}
}
0