알고리즘
프로그래머스(programmers) 네트워크 python 정답[DFS 풀이]
TheSapper
2023. 2. 8. 02:05
반응형
프로그래머스(programmers) 네트워크 python 정답[DFS 풀이]
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/43162
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 정답
from collections import defaultdict, deque
def solution(n, computers):
visited = [False] * (n)
answer = 0
graph = defaultdict(set)
# 그래프 만들기
for i in range(len(computers)):
for j in range(len(computers[i])):
if computers[i][j] ==1 :
addGraph(graph,i,j)
addGraph(graph,j,i)
# 방문 여부 판단하기
for start in range(n):
# 모든 정점을 시작점으로 Test
if not visited[start]:
answer +=1
dfs(graph,visited,start)
return answer
def addGraph(graph,i,j):
graph[i].add(j)
graph[j].add(j)
def dfs(graph,visited,start):
if visited[start]:
return
else:
visited[start] = True
for to in graph[start]:
dfs(graph,visited,to)
return
문제 해설
일반적인 그래프 방문 문제와 유사하다
다른점이 있다면, 최단거리나 mst 경로를 찾는 것이 아니라, 끊어져 있는 그래프가 몇 개가 있는지 찾는 것이다.
- 무방향 그래프를 만들어주고
- 각 점에 대해서 그래프 순회를 시작하여 갈 수 있는 점을 방문한다
- 만약 다음 점에서 다시 그래프 순회를 시작할 수 있다면, 끊어진 그래프가 있는 것이므로 answer를 하나 더해준다
반응형