import sys
sys.stdin =open('in.txt','rt')
sys.setrecursionlimit(10**6)
n = int(input())
dfs_list = []
answer = []
for _ in range(n):
dfs_list.append(list(map(int, input())))
def dfs(x,y):
global count
if x >= n or x < 0 or y >= n or y < 0:
return False
if dfs_list[x][y] == 0:
return False
dfs_list[x][y] = 0
count += 1
dfs(x+1, y)
dfs(x-1, y)
dfs(x, y+1)
dfs(x, y-1)
return count
for i in range(n):
for k in range(n):
count = 0
response = dfs(i,k)
if response != False:
answer.append(response)
answer.sort()
print(len(answer))
for a in answer:
print(a)
예전에 한번 풀었던 문제이다.
백준 1012 유기농 배추와 1743번 음식물 피하기 문제를 합쳐놓은 문제이다.
다만, 오름차순으로 정렬해서 출력해야하기 때문에 영역의 1의 합을 answer 리스트에 저장해놓았다가 정렬하고 출력한다.