import sys
def dfs(r, c):
global count
visited[r][c] = 1
for i in range(4):
nr = r + dx[i]
nc = c + dy[i]
if 0 <= nr < N and 0 <= nc < N:
if apart[nr][nc] == '1' and visited[nr][nc] == 0:
visited[nr][nc] = 1
count += 1
dfs(nr, nc)
return count
# 연결되어있고 그 연결이 끝나면 한 동
# 연결되어있는 집의 수 세기
N = int(sys.stdin.readline())
apart = [list(sys.stdin.readline()) for _ in range(N)]
visited = [[0]*N for _ in range(N)]
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]
# 1있는곳찾기
count = 0
result = []
for i in range(N):
for j in range(N):
# 아파트가 있고 방문하지 않았다면
if apart[i][j] == '1' and visited[i][j] == 0:
# dfs로 연결된 아파트 찾기
block = dfs(i, j)
result.append(block)
count = 0
print(len(result))
for i in sorted(result):
print(i+1)
따로 떨어져 있는 아파트를 어떻게 찾고 어떻게 초기화할지 몰라서 고민했다.
오래 고민하는것보다 답을 본뒤 어떻게 푸는지 이해하고 다음에 비슷한 문제에 또 적용할 수 있는 것이 더 중요할 것 같다!