백준/Search

[dfs/백준] 2667번: 단지번호 붙이기

ydin 2022. 7. 19. 19:30

-문제 : https://www.acmicpc.net/problem/2667

 

스스로 푼 문제다! 전에 풀었을 때는 아쉽게 답지를 봤던 것 같은데, 이번에는 5트만에 정답이었다

dfs문제이고, gloabl count로 각 단지의 수를 구하는 것이 요점인 것 같다. 

그리고 탐색 시작하는 지점 방문처리하고 시작하는 것도!

 

-정답 풀이 :

n=int(input())
data=[]
for _ in range(n):
    data.append(list(map(int,input())))
dx=[-1,1,0,0]
dy=[0,0,-1,1]
result=[]

def dfs(x,y):
    global count
    for i in range(4):
        nx, ny = x + dx[i], y + dy[i]
        if 0 <= nx < n and 0<= ny < n :
            if data[nx][ny] and not visit[nx][ny]:
                visit[nx][ny]=1
                count+=1
                dfs(nx,ny)  
    
visit=[[0]*n for _ in range(n)]                
for i in range(n):
    for j in range(n):
        if not visit[i][j] and data[i][j]==1:  
            visit[i][j]=1
            count=1
            dfs(i,j)
            result.append(count)

            
print(len(result))            
result.sort()
for i in range(len(result)):
    print(result[i])