Algorithm/DFS

[프로그래머스 Lv.3] 네트워크

킹우현 2023. 7. 31. 00:02

def solution(n, computers):
    answer = 0
    graph = [[] for i in range(n)]
    visited = [False]*n
    
    for i,row in enumerate(computers):
        for j,value in enumerate(row):
            if i != j and value == 1:
                graph[j].append(i)
    
    def dfs(n):
        
        if visited[n]:
            return False
        
        visited[n] = True
        
        for i in graph[n]:
            if not visited[i]:
                dfs(i)
        
        return True
        
    for i in range(n):
        if dfs(i):
            answer += 1
    
    return answer

이번 문제는 컴퓨터의 개수 n과 연결에 대한 정보가 담긴 2차원 배열 computers가 주어졌을 때, 직/간접적으로 연결되어있는 네트워크의 개수를 구하는 문제이다.

 

이 문제는 백준에서 출제된 네트워크 문제와 상당히 유사한데 주어진 연결 정보들을 인접 리스트 형태로 저장하고, 각 컴퓨터마다 방문 여부를 기록하는 visited 배열을 가지고 DFS로 풀이하여 매우 쉽게 풀이할 수 있었다.

 

DFS를 복습할 수 있는 간단한 문제였다 :)

'Algorithm > DFS' 카테고리의 다른 글

[백준 16724번] 피리 부는 사나이  (0) 2023.08.20
[백준 16637번] 괄호 추가하기  (0) 2023.08.10
[프로그래머스 Lv.3] 여행경로  (0) 2023.07.30
[HackerRank] Count Luck  (0) 2023.05.19
[백준 11725번] 트리의 부모 찾기  (0) 2023.04.06