[BOJ]11724_연결 요소의 개수

zioo·2022년 4월 11일

문제

방향 없는 그래프가 주어졌을 때, 연결 요소 (Connected Component)의 개수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가 주어진다. (1 ≤ u, v ≤ N, u ≠ v) 같은 간선은 한 번만 주어진다.

출력

첫째 줄에 연결 요소의 개수를 출력한다.

문제풀이

DFS를 이용하여 문제를 해결합니다.

Point

단 재귀를 이용할때 파이썬의 경우 최대 재귀 횟수(1000회)를 넘으면 오류가 발생하기 때문에

sys.setrecursionlimit(10000)

sys.setrecursionlimit() 메소드를 통해 제한을 풀어줘야합니다.'

코드

import sys 
input = sys.stdin.readline
sys.setrecursionlimit(10000)
N,M = map(int,input().split())
graph = [[] for _ in range(N+1)]
graph[0] = [0,0]
visited = [False for _ in range(N+1)]

count = 0

for _ in range(M):
    start, end = map(int, input().split())
    graph[start].append(end)
    graph[end].append(start)
    graph[start].sort()
    graph[end].sort()


def DFS(graph, start, visited):
    visited[start] = True

    for i in graph[start]:
        if not visited[i]:
            DFS(graph, i, visited)


for i in range(1, len(visited)):
    if visited[i] == False:
        count += 1
        DFS(graph, i, visited)

print(count)

0개의 댓글