๐ฉ๐ป๐พ
[๋ฐฑ์ค/Python] 11724๋ฒ ์ฐ๊ฒฐ ์์์ ๊ฐ์ ๊ตฌํ๊ธฐ ๋ณธ๋ฌธ
[๋ฐฑ์ค/Python] 11724๋ฒ ์ฐ๊ฒฐ ์์์ ๊ฐ์ ๊ตฌํ๊ธฐ
์ฅฌ์ค์ด 2023. 2. 19. 15:071๏ธโฃ๋ฌธ์ ์ค๋ช
๋ฐฉํฅ ์๋ ๊ทธ๋ํ๊ฐ ์ฃผ์ด์ก์ ๋, ์ฐ๊ฒฐ ์์ (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์ ์คํ ํ์ = ์ฐ๊ฒฐ ์์ ๊ฐ์
'์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค(BOJ)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค/Python] 13023๋ฒ ABCDE (0) | 2023.03.02 |
---|---|
[๋ฐฑ์ค/Python] 2023๋ฒ ์ ๊ธฐํ ์์ (0) | 2023.02.19 |
[๋ฐฑ์ค/Python] 10989๋ฒ ์ ์ ๋ ฌํ๊ธฐ3 (0) | 2023.02.19 |
[๋ฐฑ์ค/Python] 2761๋ฒ ์ ์ ๋ ฌํ๊ธฐ 2 (0) | 2023.02.15 |
[๋ฐฑ์ค/Python] 1427๋ฒ ์ํธ์ธ์ฌ์ด๋ (0) | 2023.02.10 |