๐Ÿ‘ฉ๐Ÿป‍๐ŸŒพ

[๋ฐฑ์ค€/Python] 11724๋ฒˆ ์—ฐ๊ฒฐ ์š”์†Œ์˜ ๊ฐœ์ˆ˜ ๊ตฌํ•˜๊ธฐ ๋ณธ๋ฌธ

์ฝ”๋”ฉํ…Œ์ŠคํŠธ/๋ฐฑ์ค€(BOJ)

[๋ฐฑ์ค€/Python] 11724๋ฒˆ ์—ฐ๊ฒฐ ์š”์†Œ์˜ ๊ฐœ์ˆ˜ ๊ตฌํ•˜๊ธฐ

์ฅฌ์Šค์ด 2023. 2. 19. 15:07
728x90

1๏ธโƒฃ๋ฌธ์ œ ์„ค๋ช…

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

2๏ธโƒฃ์ž…๋ ฅ

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

3๏ธโƒฃ์ถœ๋ ฅ

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


๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป์ž‘์„ฑํ•œ ์ฝ”๋“œ

import sys

sys.setrecursionlimit(10 ** 6)  # ์žฌ๊ท€ ์ตœ๋Œ€ ๊นŠ์ด ์„ค์ •
input = sys.stdin.readline


def DFS(v):
    visited[v] = True
    for i in A[v]:
        if not visited[i]:  
            DFS(i) 


n, m = map(int, input().split())	# ๋…ธ๋“œ ๊ฐœ์ˆ˜, ์—์ง€ ๊ฐœ์ˆ˜
A = [[] for _ in range(n + 1)]		# ๊ทธ๋ž˜ํ”„๋ฅผ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋กœ ์ €์žฅ
visited = [False] * (n + 1)		# ๋ฐฉ๋ฌธ ๊ธฐ๋ก ์ €์žฅ
cnt = 0					# ์—ฐ๊ฒฐ ์š”์†Œ ๊ฐœ์ˆ˜

for _ in range(m):
    u, v = map(int, input().split())	# ์—์ง€์˜ ์–‘๋ ์  u, v
    A[u].append(v)
    A[v].append(u)

for i in range(1, n + 1):	
    if not visited[i]:
        cnt += 1
        DFS(i)

print(cnt)

 

๐Ÿ’ก์ฝ”๋“œ ์„ค๋ช…

์ด ๋ฌธ์ œ๋Š”  ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰(= DFS) ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ํ’€์—ˆ๋‹ค. 

 

DFS() ํ•จ์ˆ˜๋ฅผ ์„ค๋ช…ํ•˜๋ฉด, ์ž…๋ ฅ ๋“ค์–ด์˜จ ๋…ธ๋“œ๋ฅผ visited ๋ฆฌ์ŠคํŠธ์— ๊ธฐ๋ก์„ ํ•ด์ฃผ๊ณ , ์ž…๋ ฅ ๋“ค์–ด์˜จ ๋…ธ๋“œ์˜ ์—ฐ๊ฒฐ ๋…ธ๋“œ ์ค‘ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ๋กœ DFS()ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•œ๋‹ค -> ์žฌ๊ท€ํ•จ์ˆ˜ ํ˜•ํƒœ -> 'sys.setrecursionlimit(10 ** 6)' ์ฝ”๋“œ ํ•„์š” -> WHY? ํŒŒ์ด์ฌ์˜ ์žฌ๊ท€ ์ตœ๋Œ€ ๊นŠ์ด์˜ ๊ธฐ๋ณธ ์„ค์ •์ด 1,000ํšŒ์ด๊ธฐ ๋•Œ๋ฌธ์—  ์žฌ๊ท€๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋Œ€๋‹ค์ˆ˜

 

for i in range(1, n + 1)์ธ ๋ถ€๋ถ„์„ ๋ณด๋ฉด, n์˜ ๊ฐœ์ˆ˜๋งŒํผ ๋ฐ˜๋ณต ํ–ˆ์„ ๋•Œ, ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ๊ทธ๋ž˜ํ”„๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์ด๋ฏ€๋กœ cnt๋ฅผ +1 ํ•ด์ค€๋‹ค.

 

๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐ์— ์‹คํ–‰ํ•œ DFS์˜ ์‹คํ–‰ ํšŸ์ˆ˜ = ์—ฐ๊ฒฐ ์š”์†Œ ๊ฐœ์ˆ˜

728x90
Comments