문제 링크
https://www.acmicpc.net/problem/11724
11724번: 연결 요소의 개수
첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가 주어진다. (1 ≤ u, v ≤ N, u ≠ v) 같은 간선은 한 번만 주
www.acmicpc.net
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 |