문제 링크
https://www.acmicpc.net/problem/11724
dfs를 이용하여 1이 들어있는 연결된 요소 하나를 찾고
for문과 if를 활용해서 만약 연결되지 않은 노드가 있다면 그 요소들끼리 또 묶어주었다.
그리고 그 연결된 요소가 몇개인지 알기 위해 result 리스트를 사용하였다.
자꾸 recursion error가 났었는데 이는 파이썬에서 설정한 재귀 깊이를 넘어서 그런 것이었다.
sys.setrecursionlimit(10 ** 6)
이 코드를 사용하여 재귀 깊이를 더 늘려주었다.
정답 코드
import sys
sys.setrecursionlimit(10 ** 6)
N, M = map(int,sys.stdin.readline().split())
nodes = []
for i in range(M):
nodes.append(list(map(int,sys.stdin.readline().split())))
graph = [[] for _ in range(N+1)]
for node in nodes :
graph[node[0]].append(node[1])
graph[node[1]].append(node[0])
graph = list(map(sorted, graph)) #그래프 정렬
visited = [False] * (N+1)
def dfs(V):
visited[V] = True
for i in graph[V]:
if not visited[i]:
dfs(i)
result = []
result.append(dfs(1))
for i in range(1,N+1):
if not visited[i]:
result.append(dfs(i))
print(len(result))
728x90
'파이썬 알고리즘 문제 풀이' 카테고리의 다른 글
Baekjoon Online Judge 10451번 파이썬 (0) | 2022.08.04 |
---|---|
Baekjoon Online Judge 1707번 파이썬 (0) | 2022.08.02 |
Baekjoon Online Judge 1260번 파이썬 (0) | 2022.08.01 |
DFS, BFS (0) | 2022.07.29 |
Baekjoon Online Judge 2004번 파이썬 (0) | 2022.07.27 |