본문 바로가기

Archived(CSE Programming)/알고리즘(Python)

프로그래머스 - 네트워크(파이썬, LV3) / 탐색(DFS)

https://programmers.co.kr/learn/courses/30/lessons/43162?language=python3

 

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

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

programmers.co.kr

문제는 간단한 DFS 문제이다.

LV3의 난이도가 아닌거 같은데 여튼, 섬 개수 찾기와 같은 유형의 문제이다. 

DFS를 통해 방문할 수 있는 곳을 전부 방문하고 방문하지 않은 곳이 있으면 다시 DFS를 호출하면서

전체를 탐색할 동안 DFS를 몇 번 호출했는지를 찾으면 된다.

def solution(n, computers):
    answer = 0
    visit = [False] * n
    
    def dfs(dst):
        # 방문했던 곳이면 패스
        if visit[dst] == True:
            return 
        
        visit[dst] = True # 방문
            
        # 연결된 곳 탐색
        for i in range(n):
            if dst != i and visit[i] == False and computers[dst][i] == 1 :
                dfs(i)
    
    # 방문
    while True:
        # 방문 안한 곳이 있으면 방문
        if False in visit:
            dfs(visit.index(False))
            answer+=1
        
        else:
            break
    
    return answer