from collections import deque
import sys
N = int(input())
M = [[0] * N for _ in range(N)]
for i in range(N):
line = sys.stdin.readline()
for j in range(N):
M[i][j] = int(line[j])
dr = [-1, 1, 0, 0]
dc = [0, 0, -1, 1]
def bfs(x, y):
queue = deque()
queue.append((x, y))
M[x][y] = 0
cnt = 1
global num
num += 1
while queue:
x, y = queue.popleft()
for i in range(4):
nx = x + dr[i]
ny = y + dc[i]
if nx < 0 or ny < 0 or nx >= N or ny >= N:
continue
if M[nx][ny] == 1:
M[nx][ny] = 0
queue.append((nx, ny))
cnt += 1
return cnt
num = 0
result = []
for i in range(N):
for j in range(N):
if M[i][j] == 1:
result.append(bfs(i, j))
result.sort()
print(num)
for i in range(num):
print(result[i])
'공부하자! > 알고리즘' 카테고리의 다른 글
백준 7576번 토마토 파이썬 - bfs (0) | 2021.09.09 |
---|---|
백준 1012번 유기농 배추 파이썬 - bfs (0) | 2021.09.09 |
프로그래머스 | 짝지어 제거하기 파이썬 (0) | 2021.08.22 |
프로그래머스 | 오픈채팅방 파이썬 (0) | 2021.08.19 |
프로그래머스 | 문자열 압축 파이썬 (0) | 2021.08.17 |