์ด๋ฒ ๊ธ์์๋ ๋ฐฑ์ค 2606๋ฒ ๋ฌธ์ "๋ฐ์ด๋ฌ์ค"๋ฅผ ํจ๊ป ํด๊ฒฐํด ๋ณด๊ฒ ์ต๋๋ค. ์ด ๋ฌธ์ ๋ ๋คํธ์ํฌ ์์์ ์ปดํจํฐ ๋ฐ์ด๋ฌ์ค๊ฐ ํผ์ง๋ ๊ฒ์ ์๋ฎฌ๋ ์ด์ ํ์ฌ ๊ฐ์ผ๋ ์ปดํจํฐ์ ์๋ฅผ ๊ณ์ฐํ๋ ๋ฌธ์ ์ ๋๋ค.
1. ๋ฌธ์ ์ค๋ช
1) ๋ฌธ์ ๊ฐ์
• ํ ์ปดํจํฐ๊ฐ ๋ฐ์ด๋ฌ์ค์ ๊ฐ์ผ๋๋ฉด ๋คํธ์ํฌ๋ฅผ ํตํด ์ฐ๊ฒฐ๋ ๋ชจ๋ ์ปดํจํฐ๋ก ๋ฐ์ด๋ฌ์ค๊ฐ ํผ์ง๋๋ค.
• 1๋ฒ ์ปดํจํฐ๊ฐ ๋ฐ์ด๋ฌ์ค์ ๊ฐ์ผ๋์์ ๋, ๋คํธ์ํฌ๋ฅผ ํตํด ๋ฐ์ด๋ฌ์ค์ ๊ฐ์ผ๋๋ ์ปดํจํฐ์ ์๋ฅผ ๊ณ์ฐํ๋ ๋ฌธ์ ์ ๋๋ค.
2) ์ ๋ ฅ
• ์ฒซ ์ค์ ์ปดํจํฐ์ ์ N
(1 ≤ N ≤ 100)๊ณผ ์ฐ๊ฒฐ๋ ์์ ์ T
๊ฐ ์ฃผ์ด์ง๋๋ค.
• ๋ค์ ์ค๋ถํฐ T
๊ฐ์ ์ค์ ๊ฑธ์ณ ๊ฐ ์ค์ ๋ ์ ์ a
์ b
๊ฐ ์ฃผ์ด์ง๋๋ค. ์ด๋ a
๋ฒ ์ปดํจํฐ์ b
๋ฒ ์ปดํจํฐ๊ฐ ์ฐ๊ฒฐ๋์ด ์๋ค๋ ์๋ฏธ์
๋๋ค.
3) ์ถ๋ ฅ
• 1๋ฒ ์ปดํจํฐ๋ฅผ ํตํด ๋ฐ์ด๋ฌ์ค์ ๊ฐ์ผ๋๋ ์ปดํจํฐ์ ์๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
2. ์ ๊ทผ๋ฒ
1) ์ ๋ ฅ๋ฐ๊ธฐ
• sys.stdin.readline
์ ์ฌ์ฉํ์ฌ ์
๋ ฅ ์๋๋ฅผ ๋์
๋๋ค.
• ์ฒซ ๋ฒ์งธ ์ค์์ ์ปดํจํฐ์ ์ N
๊ณผ ์ฐ๊ฒฐ๋ ์์ ์ T
๋ฅผ ์
๋ ฅ๋ฐ์ต๋๋ค.
2) ๊ทธ๋ํ ๊ตฌ์ฑ
• ์ธ์ ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ์ปดํจํฐ ๊ฐ์ ์ฐ๊ฒฐ ์ํ๋ฅผ ์ ์ฅํฉ๋๋ค.
• ์ปดํจํฐ์ ๋ฒํธ๋ 1๋ถํฐ ์์ํ๋ฏ๋ก ์ธ๋ฑ์ค ์กฐ์ ์์ด ๊ทธ๋๋ก ์ฌ์ฉํฉ๋๋ค.
3) BFS๋ฅผ ์ด์ฉํ ๊ฐ์ผ ์๋ฎฌ๋ ์ด์
• BFS(๋๋น ์ฐ์ ํ์)๋ฅผ ์ฌ์ฉํ์ฌ 1๋ฒ ์ปดํจํฐ๋ก๋ถํฐ ๋ฐ์ด๋ฌ์ค๊ฐ ํผ์ง๋ ๊ณผ์ ์ ์๋ฎฌ๋ ์ด์ ํฉ๋๋ค.
• ํ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐฉ๋ฌธํ ์ปดํจํฐ๋ฅผ ์ถ์ ํ๊ณ , ๋ฐฉ๋ฌธํ ์ปดํจํฐ๋ฅผ ๊ธฐ๋กํ์ฌ ์ค๋ณต ๋ฐฉ๋ฌธ์ ๋ฐฉ์งํฉ๋๋ค.
3. ์ ๋ต ์ฝ๋
import sys
input = sys.stdin.readline
# ์ปดํจํฐ(๋
ธ๋)์ ์๋ฅผ ์
๋ ฅ๋ฐ์
N = int(input())
# ๊ทธ๋ํ๋ฅผ ์ ์ฅํ ์ธ์ ๋ฆฌ์คํธ๋ฅผ ์ด๊ธฐํ (1๋ฒ ์ธ๋ฑ์ค๋ถํฐ ์ฌ์ฉํ๊ธฐ ์ํด N+1)
adj = [[] for _ in range(N+1)]
# ์ฐ๊ฒฐ๋ ์ปดํจํฐ ์์ ์๋ฅผ ์
๋ ฅ๋ฐ์
T = int(input())
# ๊ฐ ์ฐ๊ฒฐ ์ ๋ณด๋ฅผ ์
๋ ฅ๋ฐ์ ์ธ์ ๋ฆฌ์คํธ์ ์ถ๊ฐ
for _ in range(T):
a, b = map(int, input().split())
adj[a].append(b)
adj[b].append(a)
# ๊ฐ ์ปดํจํฐ์ ๋ฐฉ๋ฌธ ์ฌ๋ถ๋ฅผ ์ ์ฅํ ๋ฆฌ์คํธ๋ฅผ ์ด๊ธฐํ (์ฒ์์ ๋ชจ๋ ๋ฐฉ๋ฌธํ์ง ์์)
visited = [0] * (N+1)
# BFS๋ฅผ ์ํ ํ๋ฅผ ์ด๊ธฐํํ๊ณ , 1๋ฒ ์ปดํจํฐ(๊ฐ์ผ๋ ์ปดํจํฐ)๋ฅผ ํ์ ์ถ๊ฐ
q = []
q.append(1)
visited[1] = 1 # 1๋ฒ ์ปดํจํฐ๋ฅผ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
ans = 0 # ๊ฐ์ผ๋ ์ปดํจํฐ ์๋ฅผ ์ธ๊ธฐ ์ํ ๋ณ์
# ํ๊ฐ ๋น ๋๊น์ง ๋ฐ๋ณต
while q:
s = q.pop(0) # ํ์ ์์์๋ถํฐ ๋
ธ๋๋ฅผ ๊บผ๋
for i in adj[s]: # ๊บผ๋ธ ๋
ธ๋์ ์ฐ๊ฒฐ๋ ๋ชจ๋ ๋
ธ๋๋ฅผ ํ์ธ
if visited[i] == 0: # ๋ง์ฝ ํด๋น ๋
ธ๋๋ฅผ ์์ง ๋ฐฉ๋ฌธํ์ง ์์๋ค๋ฉด
q.append(i) # ํ์ ์ถ๊ฐํ๊ณ
visited[i] = 1 # ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
ans += 1 # ๊ฐ์ผ๋ ์ปดํจํฐ ์ ์ฆ๊ฐ
# ๊ฐ์ผ๋ ์ปดํจํฐ ์๋ฅผ ์ถ๋ ฅ
print(ans)
4. ์ฝ๋ ์ค๋ช
1) ์ ๋ ฅ ๋ฐ๊ธฐ
• N๊ณผ T๋ฅผ ์ ๋ ฅ๋ฐ๊ณ , ๊ฐ ์ปดํจํฐ์ ์ฐ๊ฒฐ ์ํ๋ฅผ ์ธ์ ๋ฆฌ์คํธ์ ์ ์ฅํฉ๋๋ค.
2) ๊ทธ๋ํ ๊ตฌ์ฑ
• ์ธ์ ๋ฆฌ์คํธ adj๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ์ปดํจํฐ์ ์ฐ๊ฒฐ ์ํ๋ฅผ ์ ์ฅํฉ๋๋ค.
3) BFS๋ฅผ ์ด์ฉํ ๊ฐ์ผ ์๋ฎฌ๋ ์ด์
• ํ q๋ฅผ ์ฌ์ฉํ์ฌ BFS๋ฅผ ๊ตฌํํฉ๋๋ค.
• 1๋ฒ ์ปดํจํฐ๋ฅผ ์์์ผ๋ก ๊ฐ์ผ๋ ์ปดํจํฐ๋ฅผ ํ์ ์ถ๊ฐํ๊ณ , ๋ฐฉ๋ฌธํ ์ปดํจํฐ๋ visited ๋ฆฌ์คํธ์ ํ์ํฉ๋๋ค.
• ํ๊ฐ ๋น ๋๊น์ง ์ฐ๊ฒฐ๋ ๋ชจ๋ ์ปดํจํฐ๋ฅผ ํ์ํ์ฌ ๊ฐ์ผ๋ ์ปดํจํฐ์ ์๋ฅผ ๊ณ์ฐํฉ๋๋ค.
4) ๊ฒฐ๊ณผ ์ถ๋ ฅ
• ์ต์ข ์ ์ผ๋ก ๊ฐ์ผ๋ ์ปดํจํฐ์ ์๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
***
1. ๊ทธ๋ํ ๊ตฌ์ฑ
์๋ฅผ ๋ค์ด, ์ปดํจํฐ์ ์ฐ๊ฒฐ ์ ๋ณด๊ฐ ๋ค์๊ณผ ๊ฐ๋ค๊ณ ํด๋ณด๊ฒ ์ต๋๋ค
1 - 2
1 - 5
2 - 3
2 - 4
์ด๋ฅผ ์ธ์ ๋ฆฌ์คํธ๋ก ํํํ๋ฉด
adj = [
[],
[2, 5], # 1๋ฒ ์ปดํจํฐ์ ์ฐ๊ฒฐ๋ ์ปดํจํฐ๋ค
[1, 3, 4], # 2๋ฒ ์ปดํจํฐ์ ์ฐ๊ฒฐ๋ ์ปดํจํฐ๋ค
[2], # 3๋ฒ ์ปดํจํฐ์ ์ฐ๊ฒฐ๋ ์ปดํจํฐ๋ค
[2], # 4๋ฒ ์ปดํจํฐ์ ์ฐ๊ฒฐ๋ ์ปดํจํฐ๋ค
[1] # 5๋ฒ ์ปดํจํฐ์ ์ฐ๊ฒฐ๋ ์ปดํจํฐ๋ค
]
2. BFS ์๋ฎฌ๋ ์ด์ ๊ณผ์
• ์ด๊ธฐ ์ํ: q = [1], visited = [0, 1, 0, 0, 0, 0], ans = 0
• 1๋ฒ ์ปดํจํฐ ์ฒ๋ฆฌ: q = [], visited = [0, 1, 1, 0, 0, 1], ans = 2 (2๋ฒ๊ณผ 5๋ฒ์ด ํ์ ์ถ๊ฐ๋จ)
• 2๋ฒ ์ปดํจํฐ ์ฒ๋ฆฌ: q = [5], visited = [0, 1, 1, 1, 1, 1], ans = 4 (3๋ฒ๊ณผ 4๋ฒ์ด ํ์ ์ถ๊ฐ๋จ)
• 5๋ฒ ์ปดํจํฐ ์ฒ๋ฆฌ: q = [3, 4], visited = [0, 1, 1, 1, 1, 1], ans = 4 (๋ ์ด์ ๋ฐฉ๋ฌธํ ๋ ธ๋ ์์)
• 3๋ฒ ์ปดํจํฐ ์ฒ๋ฆฌ: q = [4], visited = [0, 1, 1, 1, 1, 1], ans = 4 (๋ ์ด์ ๋ฐฉ๋ฌธํ ๋ ธ๋ ์์)
• 4๋ฒ ์ปดํจํฐ ์ฒ๋ฆฌ: q = [], visited = [0, 1, 1, 1, 1, 1], ans = 4 (๋ ์ด์ ๋ฐฉ๋ฌธํ ๋ ธ๋ ์์)
์ต์ข ์ ์ผ๋ก ๊ฐ์ผ๋ ์ปดํจํฐ์ ์๋ 4์ ๋๋ค.
***
5. Github์ผ๋ก ํ์ธ
'๐ ์๊ณ ๋ฆฌ์ฆ > BOJ(๋ฐฑ์ค)_Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ(๋ฐฑ์ค) 13458[์ํ ๊ฐ๋ ] (0) | 2024.07.10 |
---|---|
BOJ(๋ฐฑ์ค) 14889[์คํํธ์ ๋งํฌ] (0) | 2024.07.09 |
BOJ(๋ฐฑ์ค) 14267[ํ์ฌ ๋ฌธํ 1] (0) | 2024.07.07 |
BOJ(๋ฐฑ์ค) 1068[ํธ๋ฆฌ] (0) | 2024.07.07 |
BOJ(๋ฐฑ์ค) 10819[์ฐจ์ด๋ฅผ ์ต๋๋ก] (0) | 2024.07.05 |