DFS/BFS - 네트워크 (Level 3)

jisu_log·2025년 3월 23일

알고리즘 문제풀이

목록 보기
8/105

def dfs(com, node, visited):

    visited.add(node) # 현재 노드 방문처리
    child_list = com.get(node, [])
    
    if len(child_list) == 0: # 노드가 자식없이 하나뿐이라면
        # 네트워크 탐색 끝남
        return
    
    else: # 노드에 자식이 있다면
        for child in child_list:
            if child not in visited: # 호출 전에 방문 안한 자식에 대해서만 호출
                dfs(com, child, visited) # 각 자식에 대해 dfs 호출
    return # 네트워크 탐색 끝남


def solution(n, computers):
    answer = 0
    com = {}
    
    for i in range(0, len(computers)):
        for j in range(0, n):
            if i == j and i not in com.keys(): # 자기 자신의 경우 키가 존재하지 않을 때!! 빈 리스트만 만들어놓기
                com[i] = []
                
            elif computers[i][j] == 1 and i != j: # i와 j가 연결되어 있다면 (자기 자신은 제외)
                if i not in com.keys(): # 신규 키라면
                    com[i] = [j] # 값 추가 시 list 타입으로 넣기 (그래야 여러 value 추가 가능)
                else: # 신규 키가 아니라면
                    com[i].append(j)
    
    visited = set() # 방문 노드 저장
    
    for i in range(0, n): # 모든 컴퓨터에 대해서 방문하지 않은 것만 dfs 호출
        if i not in visited:
            dfs(com, i, visited)
            answer += 1 # 탐색이 모두 끝나고 돌아오면 네트워크 하나를 탐색한 것이므로 + 1 해주기
    
    return answer

0개의 댓글