https://www.acmicpc.net/problem/11724
๋ฐฉํฅ์๋ ๊ทธ๋ํ๊ฐ ์ฃผ์ด์ก์ ๋, ์ฐ๊ฒฐ ์์์ ๊ฐ์๋ฅผ ๊ตฌํ๋ผ
๊ทธ๋ํ๋ฅผ ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ก ์ ์ฅํ๋ค.
๊ทธ๋ํ์ ์ ์ฅ๋ ๋ ธ๋๋ฅผ ํ๋์ฉ ๋ฐฉ๋ฌธํ๋ค.
2-1. ํ๋์ ๋ ธ๋์ ์ฐ๊ฒฐ๋ ๋ ธ๋๋ค์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ก ์ ์ฅํ์ฌ, ํด๋น ๋ ธ๋์ ์ฐ๊ฒฐ๋ ๋ ธ๋๋ค ์ค ๋ฐฉ๋ฌธํ์ง ์์ ๋ ธ๋๋ฅผ ์ฐจ๋ก๋ก ๋ฐฉ๋ฌธํ๋ค.
2-2. dfs ํจ์๊ฐ ๋์ด์ ํธ์ถ๋์ง ์๊ณ ๋๋๋ฉด ์ฐ๊ฒฐ ์์๋ฅผ ๋ชจ๋ ์ฐพ์ ๊ฒ์ด๋ฏ๋ก, ํจ์ ํธ์ถ์ด ๋๋ ์ฐ๊ฒฐ๋์ง ์์ ๋ค์ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๊ฒ ๋๋ฉด ์นด์ดํธ๋ฅผ ํ๋ ๋ํ๊ณ ์ ์ฐ๊ฒฐ ์์ ๋ฐฉ๋ฌธ์ ์์ํ๋ค.
import sys
input = sys.stdin.readline
sys.setrecursionlimit(10**6)
N, M = map(int, input().split())
visited=[False]*(N+1)
graph= [[] for i in range(N+1)]
count=0
for i in range(M):
u, v = map(int, input().split())
graph[u].append(v)
graph[v].append(u)
def dfs(node):
visited[node] = True
for a in graph[node]:
if not visited[a]:
dfs(a)
for i in range(1, N+1):
if not visited[i]:
count+=1
dfs(i)
print(count)
๋ฐํ์ ์๋ฌย (RecursionError)๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด sys.setrecursionlimit(10**6) ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ค.