์๋ ํ์ธ์, ์ด๋ฒ ๊ธ์์๋ ๋ฐฑ์ค 11724๋ฒ ๋ฌธ์ ์ธ “์ฐ๊ฒฐ ์์์ ๊ฐ์” ๋ฌธ์ ๋ฅผ ํจ๊ป ํด๊ฒฐํด ๋ณด๊ฒ ์ต๋๋ค. ์ด ๋ฌธ์ ๋ ์ฃผ์ด์ง ๊ทธ๋ํ์์ ์ฐ๊ฒฐ ์์์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ ๋๋ค. ๋ฌธ์ ๋ฅผ ๋ถ์ํ๊ณ , ์ ๊ทผ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํ ํ, ์ต์ข ์ ์ธ ์ ๋ต ์ฝ๋๋ฅผ ํ์ธํด ๋ณด๊ฒ ์ต๋๋ค.
๋ฌธ์ URL: https://www.acmicpc.net/problem/11724
1. ๋ฌธ์ ์ค๋ช
1) ๋ฌธ์ ๊ฐ์
์ฃผ์ด์ง ๊ทธ๋ํ์์ ์ฐ๊ฒฐ ์์์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ ๋๋ค. ์ฐ๊ฒฐ ์์๋ ๊ทธ๋ํ ๋ด์์ ์๋ก ์ฐ๊ฒฐ๋ ์ ์ ๋ค์ ๋ถ๋ถ ์งํฉ์ผ๋ก, ๋ค๋ฅธ ์ ์ ๋ค๊ณผ๋ ์ฐ๊ฒฐ๋์ง ์์ ์งํฉ์ ๋งํฉ๋๋ค.
2) ์ ๋ ฅ
• ์ฒซ ๋ฒ์งธ ์ค์ ์ ์ ์ ๊ฐ์ N(1 ≤ N ≤ 1,000)๊ณผ ๊ฐ์ ์ ๊ฐ์ M(0 ≤ M ≤ 10,000)์ด ์ฃผ์ด์ง๋๋ค.
• ๋ ๋ฒ์งธ ์ค๋ถํฐ M๊ฐ์ ์ค์ ๊ฑธ์ณ ๊ฐ์ ์ ์ ๋ณด๊ฐ ์ฃผ์ด์ง๋๋ค. ๊ฐ ์ค์ ๋ ๊ฐ์ ์ ์ a, b๋ก ์ด๋ฃจ์ด์ง๋ฉฐ, ์ด๋ a๋ฒ ์ ์ ๊ณผ b๋ฒ ์ ์ ์ด ์ฐ๊ฒฐ๋์ด ์๋ค๋ ์๋ฏธ์ ๋๋ค. (1 ≤ a, b ≤ N)
3) ์ถ๋ ฅ
• ๊ทธ๋ํ์ ์ฐ๊ฒฐ ์์์ ๊ฐ์๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
2. ์ ๊ทผ๋ฒ
1) ์ ๋ ฅ๋ฐ๊ธฐ
• sys.stdin.readline์ ์ฌ์ฉํ์ฌ ์ ๋ ฅ ์๋๋ฅผ ๋์ ๋๋ค.
• ์ ์ ์ ๊ฐ์์ ๊ฐ์ ์ ๊ฐ์๋ฅผ ์ ๋ ฅ๋ฐ๊ณ , ๊ฐ์ ์ ๋ณด๋ฅผ ์ ๋ ฅ๋ฐ์ ์ธ์ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ญ๋๋ค.
2) ์ฐ๊ฒฐ ์์ ์ฐพ๊ธฐ
• ๋ชจ๋ ์ ์ ์ ๋ฐฉ๋ฌธํ๋ฉด์ BFS(๋๋ DFS)๋ฅผ ์ฌ์ฉํ์ฌ ์ฐ๊ฒฐ ์์๋ฅผ ์ฐพ์ต๋๋ค.
• ๋ฐฉ๋ฌธํ์ง ์์ ์ ์ ์ ์์์ผ๋ก BFS๋ฅผ ์ํํ์ฌ ์ฐ๊ฒฐ๋ ๋ชจ๋ ์ ์ ์ ๋ฐฉ๋ฌธํฉ๋๋ค.
• BFS๊ฐ ์ข ๋ฃ๋ ๋๋ง๋ค ์ฐ๊ฒฐ ์์์ ๊ฐ์๋ฅผ ์ฆ๊ฐ์ํต๋๋ค.
3. ์ ๋ต ์ฝ๋
import sys
input = sys.stdin.readline
# ๋
ธ๋์ ๊ฐ์(N)์ ๊ฐ์ ์ ๊ฐ์(M)๋ฅผ ์
๋ ฅ ๋ฐ์
N, M = map(int, input().split())
# ๊ทธ๋ํ์ ์ธ์ ๋ฆฌ์คํธ ์ด๊ธฐํ
adj = [[] for _ in range(N)]
# ๋ชจ๋ ๊ฐ์ ์ ์ฝ์ด ์ธ์ ๋ฆฌ์คํธ์ ์ถ๊ฐ
for _ in range(M):
a, b = map(int, input().split())
a -= 1 # ์
๋ ฅ ๊ฐ์ 1๋ถํฐ ์์ํ๋ฏ๋ก 0๋ถํฐ ์์ํ๋๋ก ์กฐ์
b -= 1
adj[a].append(b)
adj[b].append(a)
# ๊ฐ ๋
ธ๋์ ๋ฐฉ๋ฌธ ์ฌ๋ถ๋ฅผ ์ฒดํฌํ๋ ๋ฆฌ์คํธ
chk = [0] * N
# ์ฐ๊ฒฐ ์์์ ๊ฐ์๋ฅผ ์ธ๋ ๋ณ์
ans = 0
# ๋ชจ๋ ๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธํ ๋๊น์ง ๋ฐ๋ณต
while chk.count(0) > 0:
q = []
q.append(chk.index(0)) # ๋ฐฉ๋ฌธํ์ง ์์ ๋
ธ๋์ ์ธ๋ฑ์ค๋ฅผ ํ์ ์ถ๊ฐ
chk[q[0]] = 1 # ํด๋น ๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๋ค๊ณ ํ์
# BFS๋ฅผ ์ฌ์ฉํ์ฌ ์ฐ๊ฒฐ๋ ๋ชจ๋ ๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธ
while len(q) > 0:
s = q.pop(0)
for i in adj[s]:
if chk[i] == 0: # ๋ฐฉ๋ฌธํ์ง ์์ ๋
ธ๋๋ฅผ ์ฐพ์ผ๋ฉด
chk[i] = 1 # ๋ฐฉ๋ฌธ ํ์๋ฅผ ํ๊ณ
q.append(i) # ํ์ ์ถ๊ฐ
# ์ฐ๊ฒฐ ์์์ ๊ฐ์ ์ฆ๊ฐ
ans += 1
# ์ฐ๊ฒฐ ์์์ ๊ฐ์๋ฅผ ์ถ๋ ฅ
print(ans)
4. ์ฝ๋ ์ค๋ช
1) ์ ๋ ฅ ๋ฐ๊ธฐ
• ์ฒซ ๋ฒ์งธ ์ค์์ ์ ์ ์ ๊ฐ์ N๊ณผ ๊ฐ์ ์ ๊ฐ์ M์ ์ ๋ ฅ๋ฐ์ต๋๋ค.
• ๋ ๋ฒ์งธ ์ค๋ถํฐ M๊ฐ์ ๊ฐ์ ์ ์ ๋ ฅ๋ฐ์ ์ธ์ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ญ๋๋ค.
2) ๋ณ์ ์ด๊ธฐํ
• adj ๋ฐฐ์ด: ๊ฐ ์ ์ ์ ์ธ์ ์ ์ ๋ฆฌ์คํธ๋ฅผ ์ ์ฅํฉ๋๋ค.
• chk ๋ฐฐ์ด: ๊ฐ ์ ์ ์ ๋ฐฉ๋ฌธ ์ฌ๋ถ๋ฅผ ์ ์ฅํฉ๋๋ค.
• ans ๋ณ์: ์ฐ๊ฒฐ ์์์ ๊ฐ์๋ฅผ ์ ์ฅํฉ๋๋ค.
3) ์ฐ๊ฒฐ ์์ ์ฐพ๊ธฐ
• ๋ฐฉ๋ฌธํ์ง ์์ ์ ์ ์ ์ฐพ์ BFS๋ฅผ ์์ํฉ๋๋ค.
• BFS๋ฅผ ํตํด ์ฐ๊ฒฐ๋ ๋ชจ๋ ์ ์ ์ ๋ฐฉ๋ฌธํ๊ณ , ์ฐ๊ฒฐ ์์์ ๊ฐ์๋ฅผ ์ฆ๊ฐ์ํต๋๋ค.
4) ์ต์ข ์ถ๋ ฅ
• ์ฐ๊ฒฐ ์์์ ๊ฐ์๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
์์
1] ์ ๋ ฅ
6 5
1 2
2 5
5 1
3 4
4 6
2] ๊ทธ๋ํ์ ์ธ์ ๋ฆฌ์คํธ ์์ฑ
• ์ธ์ ๋ฆฌ์คํธ adj๋ ๋ค์๊ณผ ๊ฐ์ด ์ด๊ธฐํ๋๋ค
adj = [
[1, 4], # ์ ์ 1์ ์ธ์ ์ ์ : 2, 5
[0, 4], # ์ ์ 2์ ์ธ์ ์ ์ : 1, 5
[], # ์ ์ 3์ ์ธ์ ์ ์ : ์์
[3, 5], # ์ ์ 4์ ์ธ์ ์ ์ : 4, 6
[0, 1], # ์ ์ 5์ ์ธ์ ์ ์ : 1, 2
[3] # ์ ์ 6์ ์ธ์ ์ ์ : 4
]
3] ์ฐ๊ฒฐ ์์ ์ฐพ๊ธฐ
• BFS๋ฅผ ํตํด ์ฐ๊ฒฐ ์์๋ฅผ ์ฐพ๋๋ค.
• ์๋ฅผ ๋ค์ด, chk ๋ฐฐ์ด๊ณผ ans ๋ณ์๋ฅผ ์ ๋ฐ์ดํธํ๋ ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ๋ค:
(1) ์ฒซ ๋ฒ์งธ ์ฐ๊ฒฐ ์์ ์ฐพ๊ธฐ
• ๋ฐฉ๋ฌธํ์ง ์์ ์ฒซ ๋ฒ์งธ ์ ์ ์ 1์ด๋ค.
• BFS๋ฅผ ์์ํ์ฌ ์ฐ๊ฒฐ๋ ๋ชจ๋ ์ ์ ์ ๋ฐฉ๋ฌธ:
• ์ ์ 1 ๋ฐฉ๋ฌธ: chk = [1, 0, 0, 0, 0, 0]
• ์ ์ 2 ๋ฐฉ๋ฌธ: chk = [1, 1, 0, 0, 0, 0]
• ์ ์ 5 ๋ฐฉ๋ฌธ: chk = [1, 1, 0, 0, 1, 0]
• BFS ์ข ๋ฃ ํ, ์ฐ๊ฒฐ ์์ ๊ฐ์ ์ฆ๊ฐ: ans = 1
(2) ๋ ๋ฒ์งธ ์ฐ๊ฒฐ ์์ ์ฐพ๊ธฐ
• ๋ฐฉ๋ฌธํ์ง ์์ ๋ค์ ์ ์ ์ 3์ด๋ค.
• BFS๋ฅผ ์์ํ์ฌ ์ฐ๊ฒฐ๋ ๋ชจ๋ ์ ์ ์ ๋ฐฉ๋ฌธ:
• ์ ์ 3 ๋ฐฉ๋ฌธ: chk = [1, 1, 1, 0, 1, 0]
• ์ ์ 4 ๋ฐฉ๋ฌธ: chk = [1, 1, 1, 1, 1, 0]
• ์ ์ 6 ๋ฐฉ๋ฌธ: chk = [1, 1, 1, 1, 1, 1]
• BFS ์ข ๋ฃ ํ, ์ฐ๊ฒฐ ์์ ๊ฐ์ ์ฆ๊ฐ: ans = 2
4] ์ต์ข ์ถ๋ ฅ
• ๋ชจ๋ ์ ์ ์ ๋ฐฉ๋ฌธํ์ผ๋ฏ๋ก ์ฐ๊ฒฐ ์์์ ๊ฐ์๋ 2์ด๋ค.
• ์ต์ข ์ถ๋ ฅ: 2
์๊ฐ ๋ณต์ก๋
์ด ๋ฌธ์ ์์ ์ฌ์ฉํ ์๊ณ ๋ฆฌ์ฆ์ BFS(๋๋ DFS)๋ฅผ ์ด์ฉํ ์ฐ๊ฒฐ ์์ ์ฐพ๊ธฐ์
๋๋ค. ์๊ฐ ๋ณต์ก๋๋ ๋ค์๊ณผ ๊ฐ์ด ๋ถ์ํ ์ ์์ต๋๋ค:
• ๊ทธ๋ํ์ ๋ชจ๋ ์ ์ ์ ํ ๋ฒ์ฉ ๋ฐฉ๋ฌธํ๊ณ , ๋ชจ๋ ๊ฐ์ ์ ํ ๋ฒ์ฉ ํ์ํฉ๋๋ค.
• ๊ฐ ์ ์ ์ ๋ํด BFS๋ฅผ ์ํํ ๋, ํด๋น ์ ์ ๊ณผ ์ฐ๊ฒฐ๋ ๋ชจ๋ ๊ฐ์ ์ ํ์ธํฉ๋๋ค.
๋ฐ๋ผ์, ์๊ฐ ๋ณต์ก๋๋ ์ ์ ์ ์๋ฅผ N , ๊ฐ์ ์ ์๋ฅผ M ์ด๋ผ ํ ๋, O(N + M) ์ ๋๋ค.
5. Github์ผ๋ก ํ์ธ
'๐ ์๊ณ ๋ฆฌ์ฆ > BOJ(๋ฐฑ์ค)_Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ(๋ฐฑ์ค) 11725[ํธ๋ฆฌ์ ๋ถ๋ชจ ์ฐพ๊ธฐ] (0) | 2024.07.25 |
---|---|
BOJ(๋ฐฑ์ค) 1389[์ผ๋น ๋ฒ ์ด์ปจ์ 6๋จ๊ณ ๋ฒ์น] (0) | 2024.07.23 |
BOJ(๋ฐฑ์ค) 14891[ํฑ๋๋ฐํด] (0) | 2024.07.20 |
BOJ(๋ฐฑ์ค) 5525[IOIOI] (0) | 2024.07.18 |
BOJ(๋ฐฑ์ค) 1417[๊ตญํ์์ ์ ๊ฑฐ] (0) | 2024.07.17 |