-
boj)1926 - 그림PS/boj 2020. 10. 15. 18:16
import java.io.*; import java.util.*; public class boj_1926 { static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); static StringTokenizer st; static Queue<Pair> q = new LinkedList<>(); static int[][] a; static boolean[][] v; static int n, m, size; static List<Integer> sizeList = new ArrayList<>(); static int[] lx = {-1, 1, 0, 0}; static int[] ly = {0, 0, -1, 1}; public static void main(String[] args) throws IOException { st = new StringTokenizer(br.readLine()); n = Integer.parseInt(st.nextToken()); m = Integer.parseInt(st.nextToken()); a = new int[n][m]; v = new boolean[n][m]; for (int i = 0; i < n; i++) { st = new StringTokenizer(br.readLine()); for (int j = 0; j < m; j++) { a[i][j] = Integer.parseInt(st.nextToken()); } } for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { // 시작 부분 if (a[i][j] == 1 && !v[i][j]) { v[i][j] = true; q.offer(new Pair(i, j)); while (!q.isEmpty()) { Pair p = q.poll(); size++; for (int k = 0; k < 4; k++) { int dx = p.x + lx[k]; int dy = p.y + ly[k]; if (dx >= 0 && dx < n && dy >= 0 && dy < m) { if (!v[dx][dy] && a[dx][dy] == 1) { v[dx][dy] = true; q.offer(new Pair(dx, dy)); } } } } sizeList.add(size); size = 0; } } } if (sizeList.isEmpty()) { System.out.println(0); System.out.println(0); } else { Collections.sort(sizeList); System.out.println(sizeList.size()); System.out.println(sizeList.get(sizeList.size() - 1)); } } } class Pair { int x; int y; public Pair(int x, int y) { this.x = x; this.y = y; } }
- bfs문제
- 그래프 전체 돌면서 시작점을 찾고 시작점에서 탐색 시작, 여기서 사이즈를 sizeList에 저장해줌
- sizeList가 0일 수도 있으니 예외처리, 아니라면 Collections.sort로 오름차순 정렬해서 Max값 구해줌
- 정답은 sizeList의 size, sizeList안에 Max값
'PS > boj' 카테고리의 다른 글
boj)1697 - 숨바꼭질 (0) 2020.10.17 boj)4179 - 불! (0) 2020.10.17 boj)10866 - 덱 (0) 2020.10.14 boj)4889 - 안정적인 문자열 (0) 2020.10.14 boj)2504 - 괄호의 값 (0) 2020.10.14