알고리즘/백준

백준 11724번 파이썬 _ 연결요소의 개수 (실버2)

이숭간 2021. 3. 24. 23:24
728x90

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/BFS
  • 문제풀이 :
    • 그래프에서 연결된 리스트 (덩어리)의 개수를 찾는문제이므로 DFS/BFS를 통해 그래프를 탐색한다.
    • dfs함수는 시작노드에서부터 연결된 노드들로 재귀적으로 호출되며 더이상 방문할 노드가 없을때 리턴된다. 
    • 따라서 전체 노드를 순회하며 아직 방문 전일때, 해당 노드를 시작노드로 하여 DFS함수를 실행하면 된다
  • 정답코드 
import sys
sys.setrecursionlimit(10**7)
input = sys.stdin.readline

n,m = map(int, input().split())
graph = [[] for _ in range(n+1)]
visited = [False] * (n+1)

for _ in range(m):
    a,b = map(int, input().split())
    graph[a].append(b)
    graph[b].append(a)

def dfs(start, visited):
    visited[start] = True
    for i in graph[start]: #start와 인접한 노드
        if visited[i] == False:
            dfs(i, visited)

count = 0
for i in range(1,n+1):
    if visited[i] == False:
        count+=1
        dfs(i, visited)

print(count)