Algorithm/BOJ
[Silver I/JAVA] 2583 ์์ญ ๊ตฌํ๊ธฐ
carsumin
2024. 12. 12. 17:15
https://www.acmicpc.net/problem/2583


์กฐ๊ฑด
- M*N ๋ชจ๋์ข ์ด์ K๊ฐ์ ์ง์ฌ๊ฐํ์ ๊ทธ๋ฆผ
- K๊ฐ์ ์ง์ฌ๊ฐํ ๋ด๋ถ๋ฅผ ์ ์ธํ ๋๋จธ์ง ๋ถ๋ถ์ ๊ตฌํ๋ ๊ฒ
- ๋ถ๋ฆฌ๋ ์์ญ ๊ฐ์, ๊ฐ ์์ญ์ ๋์ด๋ฅผ ์ถ๋ ฅ(์ค๋ฆ์ฐจ์)
ํ์ํ ๊ฒ
- ๋ค ๋ฐฉํฅ์ผ๋ก ์์ง์ด๋ฉด์ ํ์ํ๊ธฐ ์ํ dx, dy ๋ฐฐ์ด
- ์์ญ ๋์ด ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ ArrayList (๋์ด๊ฐ ์ผ๋ง๋ ๋์ฌ์ง ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ ๊ฐ๋ณ์ ์ธ ArrayList ์ฌ์ฉ)
- ์์ญ ๋์ด๋ฅผ ์ ์ฅํ cnt
ํ์ด
- ์ฌ๊ธฐ์ M์ด ๋์ด, N์ด ๋๋น์ด๋ค.
- x,y์ขํ๊ฐ์ ๋ฌธ์ ์์ ์ค๋ช ํ๋ ๊ฒ๊ณผ ๋ค๋ฅด๋๋ผ๋ ๊ทธ๋๋ก 2์ฐจ์ ๋ฐฐ์ด๋ก ๋ํ๋ด๋ ๋์ด๋ ๊ฐ๋ค.

- x, y ๋ฒ์๋งํผ ์์ญ์ 1๋ก ์ฑ์์ค
- ๋น ์์ญ์ DFS ํ์
์ ์ฒด ์ฝ๋
import java.io.*;
import java.util.*;
public class Main{
static int[][] grid;
static ArrayList<Integer> list = new ArrayList<>();
static int[] dx = {1, -1, 0, 0};
static int[] dy = {0, 0, 1, -1};
static int N,M;
static int cnt;
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] str = br.readLine().split(" ");
M = Integer.parseInt(str[0]); //M:๋์ด
N = Integer.parseInt(str[1]); //N:๋๋น
int K = Integer.parseInt(str[2]); //K:์ง์ฌ๊ฐํ ๊ฐ์
//grid ์ด๊ธฐํ
grid = new int[N][M];
//์ขํ์
๋ ฅ
for(int i=0; i<K; i++){
str = br.readLine().split(" ");
int x1 = Integer.parseInt(str[0]);
int y1 = Integer.parseInt(str[1]);
int x2 = Integer.parseInt(str[2]);
int y2 = Integer.parseInt(str[3]);
for(int x=x1; x<x2; x++){
for(int y=y1; y<y2; y++){
grid[x][y] = 1; //์์ญ 1๋ก ์ฑ์ฐ๊ธฐ
}
}
}
//DFS ํ์ (0,0)๋ถํฐ
for(int i=0; i<N; i++){
for(int j=0; j<M; j++){
if(grid[i][j]==0){
cnt = 0;
dfs(i, j);
list.add(cnt); //DFSํ์ ๋๋ ๋ค count๊ฐ list์ ๊ฒฐ๊ณผ์ ์ฅ
}
}
}
//์ถ๋ ฅ : ๋ถ๋ฆฌ๋ ์์ญ ๊ฐ์
System.out.println(list.size());
//์ถ๋ ฅ : ๊ฐ ์์ญ ๋์ด ์ค๋ฆ์ฐจ์
Collections.sort(list);
for(Integer i : list){
System.out.print(i + " ");
}
}
//DFS
private static void dfs(int x, int y){
//์์ญ์ด ์ฑ์์ ธ ์์ผ๋ฉด cnt ์ฆ๊ฐ
grid[x][y] = 1;
cnt++;
for(int i=0; i<4; i++){
int nx = x+dx[i];
int ny = y+dy[i];
if(nx>=0 && nx<N && ny>=0 && ny<M){
if(grid[nx][ny]==0){ //๋น์์ญ์ด๋ฉด ํ์ ๊ณ์
dfs(nx, ny);
}
}
}
}
}