on
백준 2667번
백준 2667번
-
좋아요
원본 : https://www.acmicpc.net/problem/2667
풀이
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.ArrayList; import java.util.Arrays; public class Main { public static BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); public static BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out)); public static void main(String[] args) throws Exception { int n = Integer.parseInt(reader.readLine()); int arr[][] = new int[n + 2][n + 2]; boolean visited[][] = new boolean[n + 2][n + 2]; int complexCnt = 0; ArrayList houseCntList = new ArrayList(); for (int i = 1; i <= n; i++) { arr[i] = Arrays.stream(("0" + reader.readLine() + "0").split("")).mapToInt(Integer::parseInt).toArray(); } for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { int result = dfs(arr, visited, i, j); if (result != 0) { complexCnt++; houseCntList.add(result); } } } writer.write(complexCnt + "
"); houseCntList.sort(null); for (int i = 0; i < houseCntList.size(); i++) { writer.write(houseCntList.get(i) + "
"); } writer.flush(); } public static int dfs(int arr[][], boolean visited[][], int x, int y) { if (arr[x][y] == 1 && visited[x][y] == false) { visited[x][y] = true; return 1 + dfs(arr, visited, x, y - 1) + dfs(arr, visited, x, y + 1) + dfs(arr, visited, x - 1, y) + dfs(arr, visited, x + 1, y); } else { return 0; } } }
from http://abc1q2w3e4r.tistory.com/213 by ccl(A) rewrite - 2021-11-09 13:27:34