새소식

🧮 알고리즘/-- 프로그래머스 (Programmers) - Python

[프로그래머스] (Python) - 네트워크

  • -

문제링크

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

 

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

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

programmers.co.kr

 

 

풀이 

 

1. 0번 컴퓨터부터 연결된 모든 컴퓨터를 방문한다. (재 방문 하지 않기 위해 g_check이라는 배열에 방문체크를 한다.)

-> 연결된 모든 컴퓨터를 방문하고 나면 answer += 1을 해준다. (연결 컴퓨터를 모두 방문하면 네트워크 한덩어리 발견!)

2. 방문체크는 DFS를 이용하여  재귀적으로 구현했다.

 

 

g_check = []
g_computers = []

def solution(n, computers):
    answer = 0
    global g_check, g_computers
    g_computers = computers
    g_check = [False for i in range(n)] # 방문 체크할 check 배열
    for j in range(n):
        if g_check[j] == False:
            dfs(j) # dfs를 호출하여 j번째 컴퓨터와 연결된 모든 컴퓨터 방문처리
            answer += 1 # 연결된 컴퓨터를 방문처리하고나면 네트워크 한 뭉치 += 1
    return answer

def dfs(j):
    global g_check
    if g_check[j] == True: # 이미 방문한 컴퓨터라면 종료
        return
    g_check[j] = True
    for (idx, v) in enumerate(g_computers[j]):
        if v == 1:
            if g_check[idx] == False: # 배열 값이 1이고(연결 되었고), 아직 방문하지 않았다면 
                dfs(idx)
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.