만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

A-maze-ing Lakes

면접 대비

시간 제한10초메모리 제한1024 MB

요약
0과 1로 이루어진 격자에서 상하좌우로 이어진 물 칸 덩어리의 개수를 세고, 각 호수의 넓이를 작은 순서로 출력합니다.
난이도

쉬움10점 중 3점

유형
행렬, BFS, 유니온 파인드
정답자
아직 제출이 없습니다

문제

환경 기관이 여러 지역의 호수를 조사하려고 한다. 이 조사는 지역별로 호수의 크기와 분포를 추정하는 더 큰 프로그램의 첫 단계다. 이 단계에서는 항공 사진으로 추정한다. 조사할 호수가 많아서 기관은 이 작업을 컴퓨터 프로그램에 맡기기로 했다. 구체적으로, 프로그램은 아래와 같은 두 가지 색 이미지를 입력받는다.

과제는 호수(이미지에서 파란색으로 표시된 부분)의 개수와 각 호수의 넓이를 구하는 것이다. 이미지는 2차원 타일 배열이며, 각 타일은 육지 또는 물이다. 타일 하나는 1제곱미터에 해당한다. 물 타일 하나가 주어지면, 그 타일에서 상하좌우 방향으로 물 타일만 거쳐 도달할 수 있는 모든 물 타일이 같은 호수에 속한다. 대각선 이동은 허용되지 않는다. 이미지 가장자리의 타일은 항상 육지라고 가정해도 된다.

입력

첫 줄에 공백 하나로 구분된 두 정수 N과 M이 주어진다(1≤N≤1031 \le N \le 10^3, 1≤M≤1031 \le M \le 10^3). 이는 N행 M열의 2차원 타일 배열을 뜻한다. 이어지는 N줄에는 각각 정확히 M글자로 이루어진 문자열이 주어진다. 0은 육지 타일, 1은 물 타일을 나타낸다.

출력

첫 줄에 서로 다른 호수의 개수 K를 출력한다. 둘째 줄에는 각 호수의 넓이(제곱미터)를 공백으로 구분하여 작은 값부터 큰 값 순서로 K개 출력한다.

예제2

  1. 예제 1

    입력
    6 13
    0000000000000
    0111101111110
    0001101000100
    0001101000110
    0011000011110
    0000000000000
    
    예상 출력
    2
    10 15
    
  2. 예제 2

    입력
    6 10
    0000000000
    0111111110
    0100000010
    0100000010
    0111111110
    0000000000
    
    예상 출력
    1
    20