반응형
풀이
DFS 혹은 BFS를 사용해 네트워크의 개수를 찾는 문제이다.
주어진 정보로 각 노드에 대한 간선 정보를 담은 link 배열을 생성하고 모든 정점을 순회하며 방문 체크를 한다.
모든 방문 체크를 끝내기 위해 몇 번의 bfs가 필요한지 계산하여 반환하면 된다.
from collections import deque
def solution(n, computers):
visited = [False] * n
link = [[] for _ in range(n)]
ans = 0
for i in range(n):
for j in range(n):
# 연결이 되지 않았거나 자기 자신인 경우
if not computers[i][j] or i == j:
continue
# 경로 추가
link[i].append(j)
# 모든 정점 순회
for i in range(n):
# 이미 방문한 정점
if visited[i]:
continue
ans += 1
q = deque([i])
visited[i] = True
while q:
v = q.popleft()
for w in link[v]:
# 이미 방문한 정점
if visited[w]:
continue
visited[w] = True
q.append(w)
return ans
반응형
'알고리즘 연습 > DFS와 BFS' 카테고리의 다른 글
[🥇5 / 백준 31423 / 파이썬] 신촌 통폐합 계획 (0) | 2024.08.30 |
---|---|
[🥇2 / 백준 3109 / 파이썬] 빵집 (2) | 2024.05.26 |
[Lv.2 / 프로그래머스 / 파이썬] 석유 시추 (PCCP 기출문제 2번) (4) | 2023.12.09 |
[🥈1 / 백준 1303 / 파이썬] 전쟁 - 전투 (0) | 2023.01.21 |
[🥇3 / 백준 16236 / 파이썬] 아기 상어 (0) | 2022.10.04 |