title: "[프로그래머스] 네트워크 Python 파이썬 해설 (Level 3) - 이도훈"
cleanUrl: "programmers/43162"
description: "프로그래머스 Level 3 문제 [네트워크]의 풀이를 정리합니다."

문제 설명 및 제한사항

아이디어 및 해결 방법

코드

import sys; sys.setrecursionlimit(1000000)
from collections import defaultdict

def dfs(u, A, vis):
    if all(vis[v] for v in A[u]):
        return
    
    for v in A[u]:
        if not vis[v]:
            vis[u] = True
            dfs(v, A, vis)
    return
    
def solution(n, computers):
    # CC 개수를 세는 문제.
    # Adj list가 더 편해서 computers를 AdjList로 변환.
    A = defaultdict(list)
    for i, row in enumerate(computers):
        for j, v in enumerate(row):
            if computers[i][j] == 1:
                A[i].append(j)
                A[j].append(i)

    # visited 배열을 초기화해두고
    vis = [False] * n
    
    answer = 0
    for u in range(n):
        if vis[u]:
            continue
        else:
            vis[u] = True
            dfs(u, A, vis)
            answer += 1
            
    return answer

출처

프로그래머스 코딩테스트 연습 https://school.programmers.co.kr/learn/challenges