


import sys
from collections import deque
input = sys.stdin.readline
N = int(input())
# graph = list(map(int,input().split()))
graph = [list(map(int, input().strip())) for _ in range(N)]
visited = [[False]*N for _ in range(N)]
answer =[]
dx = [-1,1,0,0]
dy = [0,0,-1,1]
def bfs(x,y):
queue = deque()
queue.append((x,y))
count =0
while queue:
x,y = queue.popleft()
for i in range(4):
nx,ny = x+dx[i],y+dy[i]
if nx<0 or nx>=N or ny<0 or ny>=N:
continue
if graph[nx][ny]==1 and visited[nx][ny]==False:
queue.append((nx,ny))
visited[nx][ny] =True
count+=1
return count
for i in range(N):
for j in range(N):
if graph[i][j] == 1 and visited[i][j] == False:
answer.append(bfs(i,j))
# print(answer)
print(len(answer))
answer.sort()
for a in answer:
print(a)
앞뒤, 양옆의 숫자가 1인지 확인하기 위해 dx,dy 를 초기하였다
bfs 를 구성하여서, nx,ny 가 해당하는 범위가 아니면 continue 하고, 해당하는 범위면 queue 에 append 하고 방문으로 확인, count 수를 늘려주었다
하지만, 실패가 떠서 .... 질문 게시판에서 반례를 찾아보았다
입력
5
10101
01010
10101
01010
10101
13
1
1
1
1
1
1
1
1
1
1
1
1
1
import sys
from collections import deque
input = sys.stdin.readline
N = int(input())
# graph = list(map(int,input().split()))
graph = [list(map(int, input().strip())) for _ in range(N)]
visited = [[False]*N for _ in range(N)]
answer =[]
dx = [-1,1,0,0]
dy = [0,0,-1,1]
def bfs(x,y):
queue = deque()
queue.append((x,y))
visited[x][y]=True
count =1
while queue:
x,y = queue.popleft()
for i in range(4):
nx,ny = x+dx[i],y+dy[i]
if 0 <= nx < N and 0 <= ny < N: # 유효한 좌표인지 확인
if graph[nx][ny] == 1 and not visited[nx][ny]:
queue.append((nx, ny))
visited[nx][ny] = True
count += 1
return count
for i in range(N):
for j in range(N):
if graph[i][j] == 1 and visited[i][j] == False:
answer.append(bfs(i,j))
# print(answer)
print(len(answer))
answer.sort()
for a in answer:
print(a)
if 0 <= nx < N and 0 <= ny < N: # 유효한 좌표인지 확인
if graph[nx][ny] == 1 and not visited[nx][ny]: