알고리즘 연습/DFS와 BFS

[Lv.3 / 프로그래머스 / 파이썬] 네트워크

김세진 2024. 4. 13. 17:25
반응형

 

 

 

 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

 

풀이

 

DFS 혹은 BFS를 사용해 네트워크의 개수를 찾는 문제이다.

주어진 정보로 각 노드에 대한 간선 정보를 담은 link 배열을 생성하고 모든 정점을 순회하며 방문 체크를 한다.

모든 방문 체크를 끝내기 위해 몇 번의 bfs가 필요한지 계산하여 반환하면 된다.

 

from collections import deque

def solution(n, computers):
    visited = [False] * n
    link = [[] for _ in range(n)]
    ans = 0
    
    for i in range(n):
        for j in range(n):
            # 연결이 되지 않았거나 자기 자신인 경우
            if not computers[i][j] or i == j:
                continue
                
            # 경로 추가
            link[i].append(j)
    
    # 모든 정점 순회
    for i in range(n):
        # 이미 방문한 정점
        if visited[i]:
            continue
        
        ans += 1
        q = deque([i])
        visited[i] = True
        
        while q:
            v = q.popleft()
            for w in link[v]:
                # 이미 방문한 정점
                if visited[w]:
                    continue
                
                visited[w] = True
                q.append(w)
    
    return ans
반응형