

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