๐Ÿ“š Study/Baekjoon

[Silver II] 11724 - ์—ฐ๊ฒฐ ์š”์†Œ์˜ ๊ฐœ์ˆ˜

์œฐ๊ฐฑ 2025. 4. 10. 15:27

๋ฌธ์ œ

๋ฐฉํ–ฅ ์—†๋Š” ๊ทธ๋ž˜ํ”„๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์—ฐ๊ฒฐ ์š”์†Œ (Connected Component)์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ •์ ์˜ ๊ฐœ์ˆ˜ N๊ณผ ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜ M์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ M๊ฐœ์˜ ์ค„์— ๊ฐ„์„ ์˜ ์–‘ ๋์  u์™€ v๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ u, v ≤ N, u ≠ v) ๊ฐ™์€ ๊ฐ„์„ ์€ ํ•œ ๋ฒˆ๋งŒ ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์—ฐ๊ฒฐ ์š”์†Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

์˜ˆ์ œ ์ž…๋ ฅ 1

6 5
1 2
2 5
5 1
3 4
4 6

์˜ˆ์ œ ์ถœ๋ ฅ 1

2

์˜ˆ์ œ ์ž…๋ ฅ 2

6 8
1 2
2 5
5 1
3 4
4 6
5 4
2 4
2 3

์˜ˆ์ œ ์ถœ๋ ฅ 2

1

# ํ’€์ด ๋ฐฉ๋ฒ•

์—ฐ๊ฒฐ์š”์†Œ์˜ ๊ฐœ์ˆ˜ ๊ตฌํ•˜๊ธฐ > ์ด๋Ÿฐ๊ฑด dfs๊ฐ€ ๋” ์ ์ ˆํ•˜๋‹ค๊ณ  ๋ฐฐ์› ๋‹ค.

10451-์ˆœ์„œ์‚ฌ์ดํด ๋ฌธ์ œ์™€ ๊ฑฐ์˜ ๋น„์Šทํ•œ๋“ฏ(https://dusruddl2.tistory.com/71)


# ์ฝ”๋“œ

dfs๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ๊ตณ์ด graph๋‚˜ visited๋ฅผ ์ธ์ž๋กœ ์ „ํ•ด์ค„ ํ•„์š”๋Š” ์—†์—ˆ๋‹ค

# 2025-04-16 ์žฌํ’€์ด

import sys
# sys.stdin = open("input.txt","r")
sys.setrecursionlimit(10**6)
N, M = map(int,sys.stdin.readline().split())
graph = [[] for _ in range(N+1)]
for _ in range(M):
    a, b = map(int,sys.stdin.readline().split())
    graph[a].append(b);graph[b].append(a)

visited = [False] * (N+1)

def dfs(curr):
    visited[curr] = True
    for i in graph[curr]:
        if not visited[i]:
            dfs(i)


cnt = 0
for i in range(1, N+1):
    if not visited[i]:
        dfs(i)
        cnt += 1
print(cnt)
# 20250410 15:10-15:25

import sys
# sys.stdin = open("input.txt", "r")
sys.setrecursionlimit(10**6)

n, m = map(int,sys.stdin.readline().split())
graph = [[] for _ in range(n+1)]
for _ in range(m):
    a, b = map(int,sys.stdin.readline().split())
    graph[a].append(b);graph[b].append(a)
visited = [False] * (n+1)

def dfs(graph,v,visited):
    visited[v] = True
    for i in graph[v]:
        if not visited[i]:
            dfs(graph,i,visited)

cnt = 0
for i in range(1, n+1):
    if not visited[i]:
        dfs(graph,i,visited)
        cnt += 1
print(cnt)

# ์ฐธ๊ณ  (๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜ ํ•ด๊ฒฐ)

ํŒŒ์ด์ฌ์€ ์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ ๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•ด, ๊ธฐ๋ณธ์ ์œผ๋กœ ์žฌ๊ท€ ๊นŠ์ด(limit) ๋ฅผ ์•ฝ 1000์œผ๋กœ ์ œํ•œํ•œ๋‹ค.

sys.setrecursionlimit(10**6)

์ด๋ฅผ ํ†ตํ•ด ์žฌ๊ท€ ๊นŠ์ด ์ œํ•œ์„ ๋Š˜๋ ค์„œ ๋” ๊นŠ์ด ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •ํ•˜๋ฉด ์˜ค๋ฅ˜ ํ•ด๊ฒฐ