IT/ps

백준 2667번 단지 번호 붙이기

u149_cinderella 2025. 2. 9. 16:08

 

설명할게 딱히 없다 dfs로 작성하자

 

import sys

n=int(sys.stdin.readline().rstrip())
graph=[]
for _ in range(n):
    graph.append(sys.stdin.readline().rstrip())

visited=[[0]*n for _ in range(n)]
count=0

def dfs(row,col):
    dx=[0,1,0,-1]
    dy=[-1,0,1,0]
    if graph[row][col]==0:
        return
    visited[row][col]=1
    count[0]+=1
    for i in range(4):
        if row+dy[i]>=n or row+dy[i]<0 or col+dx[i]>=n or col+dx[i]<0:
            continue
        if visited[row+dy[i]][col+dx[i]]==0 and graph[row+dy[i]][col+dx[i]]=='1':
            dfs(row+dy[i],col+dx[i])

result_count=0
result=[]
for i in range(n):
    for j in range(n):
        if graph[i][j]=='1' and visited[i][j]==0:
            count=[0]
            dfs(i,j)
            result_count+=1
            result.append(count)
print(result_count)
result.sort()
for i in result:
    print(*i)

이렇게 작성해줬다