본문 바로가기

코딩테스트(백준)

[백준] 2583 : 영역 구하기 -JAVA(자바) - 사좋배 공유

 

 

import java.util.Arrays;
import java.util.Scanner;

public class Main {

	static int arr[][];
	static boolean visit[][];
	static int sizex;
	static int sizey;
	static int area_count;
	static int count;
	static int dy[] = {0,-1,0,1,0};
	static int dx[] = {0,0,1,0,-1};
	static int ct[];
	public static void main(String[] args) {
		Scanner sc= new Scanner(System.in);
		sizey=sc.nextInt();
		sizex=sc.nextInt();
		area_count= sc.nextInt();
		arr = new int[101][101];
		visit = new boolean[101][101];
		ct= new int[101];
		count=0;
		int sum;
		int cnt=1;
		for(int t=0;t<area_count;t++) {
			int startx = sc.nextInt();
			int starty= sc.nextInt();
			int desx = sc.nextInt();
			int desy= sc.nextInt();
			for(int i=starty;i<desy;i++) {
				for(int j=startx;j<desx;j++) {
					arr[i][j]=-1;
					visit[i][j]=true;
				}
			}
		}
//		for(int i=0;i<arr.length;i++) {
//			for(int j=0;j<arr[i].length;j++) {
//				System.out.print(arr[i][j]);
//			}
//			System.out.println();
//		}
		//출력
		for(int i=0;i<sizey;i++) {
			for(int j=0;j<sizex;j++) {
				if(arr[i][j]==0) {
					++count;
					dfs(i, j);
				}
			}
		}
		System.out.println(count);
		Arrays.sort(ct);
		
		for(int i=1;i<ct.length;i++) {
			if(ct[i]!=0) {
				System.out.print(ct[i]+" ");
			}
		}
		System.out.println();
	}
	
	
	public static void dfs(int i,int j){
		int y= i;
		int x= j;
		for(int z=0;z<5;z++) {
			int ry = i+dy[z];
			int rx = j+dx[z];
			if(ry<0||rx<0||ry>=sizey||rx>=sizex||visit[ry][rx]==true) {
				continue;
			}
			arr[ry][rx]=count;
			visit[ry][rx]=true;
			ct[count]++;
			dfs(ry,rx);
		}
	}

}