알고리즘
[프로그래머스] 네트워크 (파이썬)
유병각
2022. 2. 3. 21:38
문제링크
https://programmers.co.kr/learn/courses/30/lessons/43162
코딩테스트 연습 - 네트워크
네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있
programmers.co.kr
문제풀이
이 문제는 dfs 를 사용해서 연결된 네트워크 set 의 개수가 몇개인지 구하는 문제이다.
문제에서 네트워크의 연결 상태를 n * n 의 2차원 배열로 주었다.
하지만, 이러한 데이터 형태는 사용하기가 까다로워 먼저 데이터를 사용하기 편하게 파싱했다.
[
[1],
[0,2],
[1]
]
위와 같은 형태로 파싱했으며, 이는 0 번째 노드는 1번째 노드와 연결되있고 1번째 노드는 0,2 번째 노드와 그리고 마지막으로 2번째 노드는 1번째 노드와 연결되있다는걸 의미한다.
for 문으로 0번째 노드부터 마지막 노드까지 돌며 dfs() 를 진행하며, dfs() 가 진행되는 경우 count += 1 을 해준다.
위의 예시에서 예를들어
for 문으로 0 번째 노드가 처음 dfs() 에 들어가면 count 는 1이 된다. 그 후 0 노드가 방문처리 되고, 0 과 연결되어 있는 1 노드 그리고 1과 연결되어 있는 2 노드 또한 모두 방문처리 된다.
남은 1, 2 번째 for 문에서는 이미 1,2 가 방문처리 되었기 때문에 dfs() 에 들어가지 않는다.
소스코드
def solution(n, computers):
answer = 0;
visited = [0] * n;
link = [ [] for _ in range(n) ];
for i in range(n):
for index,c in enumerate(computers[i]):
if (c == 1 and index != i):
link[i].append(index);
def dfs(number, visited):
visited[number] = 1;
for c in link[number]:
if (not visited[c]):
dfs(c, visited);
cnt = 0;
for i in range(n):
if not visited[i]:
dfs(i, visited);
cnt += 1;
return cnt;