문제풀이/프로그래머스

[프로그래머스][Lv3] - 네트워크(Python)

얄루몬 2021. 10. 25. 12:29

<오답>

def solution(n, computers):
    def dfs(x,y):
        if 0<=x<n and 0<=y<n:
            if computers[x][y] == 1:
                computers[x][y] = 2
                dfs(x,y+1)
                dfs(x,y-1)
                dfs(x-1,y)
                dfs(x+1,y)
                return True
            return False
        
    result = 0 
    for i in range(n):
        for j in range(n):
            if computers[i][j] == 1:
                dfs(i,j)
                result += 1 
    return result

 

 

<정답>

def dfs(n,computers, start,visited):
    visited[start] = True
    
    for i in range(n):
        if visited[i] == False and computers[start][i] == 1:
            visited = dfs(n,computers,i,visited)
    return visited

def solution(n, computers):
    visited = [False] * n
    cnt = 0 
    
    for start in range(n):
        if visited[start] == False:
            dfs(n,computers,start,visited)
            cnt += 1
    return cnt

#dfs로 구현했고 깊이 우선탐색이지만 단순히 덩어리를 구하는 문제이기 때문에 연결된 부분을 다 방문처리하고 덩어리 개수만 구해주면 된다.