프로그램/Python
[프로그래머스 문제풀이] 네트워크
naudhizb
2022. 4. 19. 20:03
반응형
문제 풀이 상 깊이/너비 우선 탐색 유형으로 풀이되는 문제이다.
내가 풀은 방법은 아래와 같다.
def solution(n, computers):
answer = 0
visited = [0] * n
def dfs(i):
nonlocal answer
visited[i] = 1
for n, c in enumerate(computers[i]):
if c == 1:
if 0 == visited[n]:
visited[n] = 1
dfs(n)
for i in range(n):
if visited[i] == 0:
dfs(i)
answer+= 1
return answer
통상 깊이우선탐색을 사용할 때는 스택을 사용하고,
너비우선탐색을 사용할 때는 큐를 사용하는데
이 부분이 현재는 익숙하지가 않아 재귀문법으로 풀이하였다.
스택과 큐를 이용하여 풀이하는 방법은 아래와 같다.
def solution(n, computers):
answer = 0
visited = [0 for i in range(n)]
def dfs(computers, visited, start):
stack = [start]
while stack:
j = stack.pop()
if visited[j] == 0:
visited[j] = 1
for i in range(0, len(computers)):
if computers[j][i] == and visited[i] == 0:
stack.append(i)
i = 0
while 0 in visited:
if visited[i] == 0:
dfs(computers, visited, i)
answer += 1
i += 1
return answer
def solution(n, computers):
def BFS(node, visit):
que = [node]
visit[node] = 1
while que:
v = que.pop(0)
for i in range(n):
if computers[v][i] == 1 and visit[i] == 0:
visit[i] = 1
que.append(i)
return visit
visit = [0 for i in range(n)]
answer = 0
for i in range(n):
try:
visit = BFS(visit.index(0), visit)
answer += 1
except:
break;
return answer
코드를 다시 보면서 스택과 큐를 이용해서 푸는 방법을 체화시켜야 겠다.
반응형