카테고리 없음

[프로그래머스] DFS/BFS - 네트워크(python)

f_s_t_k 2021. 10. 4. 16:50

 

https://programmers.co.kr/learn/courses/30/lessons/43162

 

코딩테스트 연습 - 네트워크

네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있

programmers.co.kr

 

 

1. deque 활용 큐를 사용한 BFS 풀이

 

from collections import deque

def solution(n, computers):
    
    computers = deque(computers)
    network = 0
    global visited
    visited = [False] * n
    
    for k in range(n):
        if BFS(n, computers, k, visited)==True:
            network += 1
        
    return network

def BFS(n, computers, k, visited):
    
    if visited[k]==True:
        return False
    
    queue = deque([computers[k]])
    visited[k] = True
    
    while len(queue)>0:
        node = queue.popleft()
        for i in range(n):
            if i!=k and node[i]==1:
                if visited[i]==False:
                    visited[i] = True
                    queue.append(computers[i])
                    
    return True

 

TypeError: 'int' object is not subscriptable 부분에서 자꾸 막혔다.

보통 리스트가 아니라 숫자를 인덱싱하는 자료구조의 문제때문에 이런 에러가 나는 것으로 알고 있는데,

끝까지 발견 못해서 주피터로 일일이 확인..

computer의 이중리스트를 데큐로도 감싸줘야 했다..

 

2. 재귀를 활용한 DFS 풀이

 

def solution(n, computers):
    network = 0
    visited = [False] * n
    for num in range(n):
        if visited[num] == False:
            DFS(n, computers, num, visited)
            network +=1
    return network
            
def DFS(n, computers, num, visited):
    visited[num] = True
    for cnt in range(n):
        if num!=cnt and computers[num][cnt]==1:
            if visited[cnt]==False:
                DFS(n, computers, cnt, visited)