문제풀이/DFS & BFS

[파이썬] [DFS] 백준 2667 단지번호붙이기

승무_ 2022. 3. 1. 15:58

문제

https://www.acmicpc.net/problem/2667

 

2667번: 단지번호붙이기

<그림 1>과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여

www.acmicpc.net

코드

dx=[-1,1,0,0]
dy=[0,0,-1,1]

def dfs(r,c,k):
    visited[r][c]=k
    for i in range(4):
        nx=r+dx[i]
        ny=c+dy[i]
        if 0<=nx<n and 0<=ny<n and array[nx][ny]==1 and visited[nx][ny]==0:
            visited[nx][ny]=k
            dfs(nx,ny,k)

n=int(input())
array=[list(map(int, list(input().rstrip()))) for _ in range(n)]
visited=[[0]*n for _ in range(n)]

count=0
k=2
for i in range(n):
    for j in range(n):
        if visited[i][j]==0 and array[i][j]==1:
            dfs(i,j,k)
            count+=1
            k+=1
result=[]
for k in range(count):
    countk = 0
    for i in range(n):
        for j in range(n):
            if visited[i][j]==k+2:
                countk+=1
    result.append(countk)
result.sort()

print(count)
for i in result:
    print(i)