1. ๋ฌธ์
https://www.acmicpc.net/problem/2667
2. ํ์ด์ ๋ํ ์ค๋ช
2์ฐจ์ ๋ฐฐ์ด์ ์ํํ๋ฉด์,
(1) 1์ ๋ง๋๋ค๋ฉด! ๊ฑฐ๊ธฐ์ ๋ถํฐ ํด๋น 1์ ์ํ์ข์ฐ ์ค ๋ถ์ด์๋ 1์ด ์๋์ง ํ์ธํ๋ค. (์ํํธ ๋จ์ง ๋ด์ ์ํํธ ์ ์ฒดํฌ)
(2) ๋ด๊ฐ ๊ธ๋ฐฉ ๋ฐฉ๋ฌธํด์ ํ์ธํ 1์ -1๋ก ๊ฐ์ ๋ฐ๊พธ์ด์ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌํ๋ค.
(3) 1 search๊ฐ ๋๋๋ฉด ํด๋น ์ํํธ ๋จ์ง์ ์ํํธ ์๋ฅผ ๋ค ์ผ ๊ฒ์ด๋ค.
(4) ์ด๋ ์ํํธ ์๋ฅผ aptList๋ผ๋ ์ํํธ ๋จ์ง ๋ณ ์ํํธ ์ ์ฒดํฌํ๋ ๊ณณ์ ์ ์ฅํ๋ค.
(5) ์ด๋ ๊ฒ ๋จ์ง ๋ณ ์ํํธ ์๋ฅผ ์ธ๋ฉด ๋๋ค.
3. ์ฝ๋
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
static int [] idx = {-1,0,1,0};
static int [] idy = {0,1,0,-1};
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
ArrayList<Integer> aptList = new ArrayList<>();
// 1) ๊ฐ ๋ฐ๊ธฐ
int N = Integer.parseInt(br.readLine());
int [][] apart = new int[N][N];
for (int i = 0; i < N; i++) {
String s = br.readLine();
for (int j = 0; j < N; j++) {
apart[i][j] = Character.getNumericValue(s.charAt(j));
}
}
// 2) 2์ฐจ์ ๋ฐฐ์ด์ ์ํ
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
int apartCnt = 0;
// 3) ์ํํ๋ค๊ฐ 1์ ๋ง๋๋ฉด ์ฌ๋ฐฉํ์์ ํตํด ๊ทผ์ฒ์ ์ํํธ ๋จ์ง ๋ชจ๋ ๊ฒ์ (ํ ๋ฒ ๊ฒ์ํ ๋ฐฉ์ -1๋ก ๊ฐ์ ๋ฐ๊พธ๊ธฐ)
if(apart[i][j] == 1){
ArrayDeque<Coordinate> aq1 = new ArrayDeque<>();
aq1.add(new Coordinate(i,j));
apart[i][j] = -1;
apartCnt++;
// 3-2) ์ฌ๋ฐฉ ํ์
while (!aq1.isEmpty()){
Coordinate now = aq1.poll();
for (int k = 0; k < 4; k++) {
int nx = now.x + idx[k];
int ny = now.y + idy[k];
// ๋ง์ฝ ์ฌ๋ฐฉ ๊ฒ์ ๊ฐ์ด 2์ฐจ์ ๋ฐฐ์ด์์ ๋ค์ด๊ฐ๊ณ , ๊ทธ ๊ฐ์ด 1์ด๋ฉด
if(nx>=0 && ny>=0 && nx < N && ny < N && apart[nx][ny] == 1){
// ๊ฐ ์ถ๊ฐ
aq1.add(new Coordinate(nx,ny));
apart[nx][ny] = -1;
apartCnt++;
}
}
}
// 3-3) 1์ ์กฐ์ฐ ํ BFS๋ฅผ ๋ค ๋์๋ค๋ฉด, ์ํํธ ๋จ์ง ํ๋๊ฐ ๋๋ ๊ฒ์ด๋ค.
// ๋ฐ๋ผ์ ํด๋น ๋จ์ง์ ์ํํธ ๊ฐ์๋ฅผ aptList์ ๋ฃ๋๋ค.
aptList.add(apartCnt);
}
}
}
// 4) ๋ชจ๋ ์ํํธ ๋จ์ง์ ์ํํธ ์๋ฅผ ์ถ๋ ฅ
Collections.sort(aptList);
System.out.println(aptList.size());
for(int temp : aptList){
System.out.println(temp);
}
}
}
class Coordinate {
int x;
int y;
public Coordinate(int x, int y){
this.x = x;
this.y = y;
}
}
0