https://school.programmers.co.kr/learn/courses/30/lessons/43162
예제 1)
아래 그림의 경우 총 2개의 네트워크가 존재한다.
예제 2)
아래의 경우 총 1개의 네트워크가 존재한다.
1번 노드부터 각 노드에서 연결되어 있는 모든 노드를 최대한 탐색한 후, 더 이상 연결된 노드가 없으면 탐색을 종료한다. 탐색을 종료하면 answer의 값을 1 증가시킨 후, 다음 노드에 연결된 노드들을 모두 탐색하는 동일한 과정을 진행한다. 더 이상 탐색할 노드가 없으면 알고리즘을 종료한 후 정답을 return 한다.
def solution(n, computers):
answer = 0
visited = [False for _ in range(n)] # 방문 여부 저장 배열
for com in range(n):
if visited[com] == False: # 1번 ~ n번 컴퓨터까지 가면서 방문하지 않은 컴퓨터라면
DFS(n, computers, com, visited)
answer += 1
return answer
def DFS(n, computers, com, visited):
visited[com] = True # 해당 노드의 방문 여부를 True로 변경
for i in range(n): # 해당 노드와 연결된 다음 노드들을 모두 탐색
if i != com and computers[i][com] == 1 and visited[i] == False:
DFS(n, computers, i, visited) # i랑 연결된 다음 노드도 쭉 탐색
# 자기 자신이 아니고, 이전 노드(com)와 현재 노드(i)가 연결된 노드이며, 현재 노드가 방문하지 않은 노드라면 방문하고, 현재 노드(i)에 대한 DFS를 계속 진행
# 연결되지 않은 노드가 나오는 순간 DFS 종료
from collections import deque
def solution(n, computers):
answer = 0
visited = [False for _ in range(n)]
for com in range(n):
if visited[com] == False:
BFS(n, computers, com, visited)
answer += 1
return answer
def BFS(n, computers, com, visited):
visited[com] = True # 방문을 했으므로 방문여부를 참으로 변경
queue = deque()
queue.append(com)
while len(queue) > 0: # 큐에 요소가 남아있는 동안 계속 append, pop 작업을 진행
com = queue.pop()
visited[com] = True
for i in range(n):
if visited[i] == False and computers[i][com] == 1 and i!=com:
queue.append(i)
from collections import deque
def solution(n, computers):
answer = 0
visited = [False for _ in range(n)]
for com in range(n):
if visited[com] == False:
BFS(n, computers, com, visited)
answer += 1
return answer
def BFS(n, computers, com, visited):
visited[com] = True # 방문을 했으므로 방문여부를 참으로 변경
queue = deque()
queue.append(com)
for i in range(n):
if visited[i] == False and computers[i][com] == 1 and i!=com:
BFS(n, computers, i, visited)