티스토리 뷰
출저 : https://www.acmicpc.net/problem/2583
"BFS"
영역을 나 누 자
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Collections; import java.util.LinkedList; import java.util.List; import java.util.Queue; import java.util.StringTokenizer; class Main { static int m,n,k; static int[][] map; static boolean[][] visited; static Queue<Integer> q = new LinkedList<>(); static List<Integer> list = new ArrayList<>(); static int dx[] = {0,0,1,-1}; static int dy[] = {1,-1,0,0}; static StringBuilder sb = new StringBuilder(); public static void main (String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); m = Integer.parseInt(st.nextToken()); n = Integer.parseInt(st.nextToken()); k = Integer.parseInt(st.nextToken()); map = new int[m][n]; visited = new boolean[m][n]; for (int i = 0; i < k; i++) { st = new StringTokenizer(br.readLine()); int x1 = Integer.parseInt(st.nextToken()); int y1 = Integer.parseInt(st.nextToken()); int x2 = Integer.parseInt(st.nextToken()); int y2 = Integer.parseInt(st.nextToken()); for (int a = m-y2 ; a <m-y1 ; a++) { for (int b = x1; b < x2 ; b++) { map[a][b] = 1; } } } int count = 0; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { if(map[i][j] == 1 || visited[i][j]) continue; visited[i][j] = true; q.add(i); q.add(j); count++; int size = 0; while(!q.isEmpty()) { int x = q.poll(); int y = q.poll(); size++; for (int k = 0; k < 4; k++) { int nx = x + dx[k]; int ny = y + dy[k]; if(nx < 0 || nx >= m || ny < 0 || ny >= n || visited[nx][ny] || map[nx][ny] == 1) continue; visited[nx][ny] = true; q.add(nx); q.add(ny); } } list.add(size); } } Collections.sort(list); for(int size : list) { sb.append(size+" "); } System.out.println(count); System.out.println(sb.toString()); } } | cs |
'Study > 알고리즘 문제풀이' 카테고리의 다른 글
백준 2026. 소풍 :: 돼지개발자 (0) | 2019.02.08 |
---|---|
백준 1389. 케빈 베이컨의 6단계 법칙 :: 돼지개발자 (0) | 2019.02.07 |
백준 2234. 성곽 :: 돼지개발자 (0) | 2019.02.07 |
백준 1463. 1로 만들기 :: 돼지개발자 (0) | 2019.02.01 |
백준 2579. 게단 오르기 :: 돼지개발자 (0) | 2019.02.01 |
댓글
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday