programmers.co.kr/learn/courses/30/lessons/43162
코딩테스트 연습 - 네트워크
네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있
programmers.co.kr
def solution(n, computers):
answer = 0
visited = [False] * n
for i in range(n):
if visited[i] == False:
dfs(n, computers, visited, i)
answer += 1
return answer
def dfs(n, computers, visited, i):
visited[i] = True
for j in range(n):
if computers[i][j] == 1 and i != j:
if visited[j] == False:
dfs(n, computers, visited, j)
방문하지 않은 노드가 있다면, dfs를 이용해 연결되어있는 모든 노드를 방문하고 answer += 1
def solution(n, computers):
def dfs(n, computers, start):
stack = [start]
while stack:
i = stack.pop()
visited[i] = True
for j in range(n):
if computers[i][j] == 1 and i != j:
if visited[j] == False:
stack.append(j)
visited = [False] * n
answer = 0
for i in range(n):
if visited[i] == False:
dfs(n, computers, i)
answer += 1
return answer
반복문을 활용한 dfs 풀이. 재귀와 비교하여 직관적이다.
def solution(n, computers):
temp = [i for i in range(n)]
for i in range(n):
for j in range(n):
if computers[i][j]:
for k in range(n):
if temp[k] == temp[i]:
temp[k] = temp[j]
return len(set(temp))
플로이드 워셜 알고리즘을 이용한 풀이. 노드가 연결되어있다면 같은 수로 만들어준다.
최종적으로 집합자료형을 이용해 중복을 제외한 개수(temp 길이)가 네트위크 개수가 된다.
'PS > 프로그래머스' 카테고리의 다른 글
[프로그래머스-DFS/BFS] 여행경로_파이썬 ❌❌ (0) | 2021.03.24 |
---|---|
[프로그래머스-DFS/BFS] 단어 변환_파이썬 ❌❌ (0) | 2021.03.23 |
[프로그래머스-DFS/BFS] 타겟 넘버_파이썬 ❌❌ (0) | 2021.03.23 |
[프로그래머스-동적계획법] 도둑질_파이썬 ❌⭕ (0) | 2021.03.23 |
[프로그래머스-동적계획법] 등굣길_파이썬 ❌🔺 (0) | 2021.03.22 |