반응형
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class Main {
static int[][] map;
static boolean[][] visited;
static ArrayList list = new ArrayList();
static int[] dx = {-1,1,0,0};
static int[] dy = {0,0,-1,1};
static int N;
public static class Point {
int x;
int y;
Point(int x, int y) {
this.x = x;
this.y = y;
}
}
public static void bfs(int x, int y) {
Queue<Point> q = new LinkedList<Point>();
int local = 1;
q.add(new Point(x,y));
visited[x][y] = true;
while(!q.isEmpty()) {
Point p = q.poll();
for (int i =0; i < 4; i++) {
int nextX = p.x + dx[i];
int nextY = p.y + dy[i];
if (nextX < 0 || nextY <0 || nextX >= N || nextY >=N) continue;
if (visited[nextX][nextY] || map[nextX][nextY] == 0) continue;
q.add(new Point(nextX,nextY));
visited[nextX][nextY] = true;
local++;
}
}
list.add(local);
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
sc.nextLine();
map = new int[N][N];
visited = new boolean[N][N];
int cnt = 0;
for (int i = 0; i < N; i++) {
String str = sc.nextLine();
for (int j = 0; j < N; j++) {
map[i][j] = str.charAt(j) -'0';
}
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (map[i][j] == 1 && visited[i][j] == false) {
bfs(i,j);
cnt++;
}
}
}
System.out.println(cnt);
Collections.sort(list);
for (int i = 0 ; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
}
반응형
LIST
'알고리즘 > 연습문제' 카테고리의 다른 글
백준 - 11399 ATM(feat. java) (0) | 2019.08.13 |
---|---|
백준 - 7576 토마토(feat. java) (0) | 2019.08.12 |
백준 - 1697 숨바꼭질(feat. java) (0) | 2019.08.12 |
백준 2178 - 미로찾기(feat. java) (0) | 2019.08.12 |
백준 1260 : DFS와 BFS (feat. java) (0) | 2019.08.12 |