์๋ ํ์ธ์, ์ด๋ฒ ๊ธ์์๋ ๋ฐฑ์ค 1389๋ฒ ๋ฌธ์ ์ธ “์ผ๋น ๋ฒ ์ด์ปจ์ 6๋จ๊ณ ๋ฒ์น” ๋ฌธ์ ๋ฅผ ํจ๊ป ํด๊ฒฐํด ๋ณด๊ฒ ์ต๋๋ค. ์ด ๋ฌธ์ ๋ ๊ฐ ์ฌ๋ ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํ์ฌ ์ผ๋น ๋ฒ ์ด์ปจ ์๊ฐ ๊ฐ์ฅ ์์ ์ฌ๋์ ์ฐพ๋ ๋ฌธ์ ์ ๋๋ค. ๋ฌธ์ ๋ฅผ ๋ถ์ํ๊ณ , ์ ๊ทผ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํ ํ, ์ต์ข ์ ์ธ ์ ๋ต ์ฝ๋๋ฅผ ํ์ธํด ๋ณด๊ฒ ์ต๋๋ค.
๋ฌธ์ URL: https://www.acmicpc.net/problem/1389
1. ๋ฌธ์ ์ค๋ช
1) ๋ฌธ์ ๊ฐ์
์ฌ๋ฌ ์ฌ๋๋ค ์ฌ์ด์ ์น๊ตฌ ๊ด๊ณ๊ฐ ์ฃผ์ด์ง ๋, ๊ฐ ์ฌ๋์ ์ผ๋น ๋ฒ ์ด์ปจ ์๋ฅผ ๊ณ์ฐํ์ฌ ๊ฐ์ฅ ์์ ์ฌ๋์ ์ฐพ๋ ๋ฌธ์ ์ ๋๋ค. ์ฌ๊ธฐ์ ์ผ๋น ๋ฒ ์ด์ปจ ์๋, ํ ์ฌ๋์ด ๋ค๋ฅธ ๋ชจ๋ ์ฌ๋๋ค๊ณผ ์ฐ๊ฒฐ๋๋ ์ต์ ๋จ๊ณ๋ฅผ ์๋ฏธํฉ๋๋ค.
2) ์ ๋ ฅ
• ์ฒซ ๋ฒ์งธ ์ค: ์ฌ๋์ ์ N (2 ≤ N ≤ 100)๊ณผ ์น๊ตฌ ๊ด๊ณ์ ์ M (1 ≤ M ≤ 5000)
• ๋ค์ M๊ฐ์ ์ค: ์น๊ตฌ ๊ด๊ณ๋ฅผ ๋ํ๋ด๋ ๋ ์ฌ๋์ ๋ฒํธ๊ฐ ์ฃผ์ด์ง๋๋ค. ์ฌ๋์ ๋ฒํธ๋ 1๋ถํฐ N๊น์ง์ ๋๋ค.
3) ์ถ๋ ฅ
• ์ผ๋น ๋ฒ ์ด์ปจ ์๊ฐ ๊ฐ์ฅ ์์ ์ฌ๋์ ๋ฒํธ๋ฅผ ์ถ๋ ฅํฉ๋๋ค. ๋ง์ฝ ์ฌ๋ฌ ๋ช ์ผ ๊ฒฝ์ฐ ๊ฐ์ฅ ๋ฒํธ๊ฐ ์์ ์ฌ๋์ ์ถ๋ ฅํฉ๋๋ค.
2. ์ ๊ทผ๋ฒ
1) ์ ๋ ฅ๋ฐ๊ธฐ
• sys.stdin.readline์ ์ฌ์ฉํ์ฌ ์ ๋ ฅ ์๋๋ฅผ ๋์ ๋๋ค.
• ์ฌ๋์ ์์ ์น๊ตฌ ๊ด๊ณ๋ฅผ ์ ๋ ฅ๋ฐ์ ์ธ์ ๋ฆฌ์คํธ์ ์ ์ฅํฉ๋๋ค.
2) BFS๋ฅผ ์ด์ฉํ ๊ฑฐ๋ฆฌ ๊ณ์ฐ
• ๊ฐ ์ฌ๋์ ๋ํด BFS๋ฅผ ์ํํ์ฌ ๋ค๋ฅธ ๋ชจ๋ ์ฌ๋๊น์ง์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํฉ๋๋ค.
• ๊ฐ ์ฌ๋์ ์ผ๋น ๋ฒ ์ด์ปจ ์๋ฅผ ๊ตฌํ๊ณ , ๊ฐ์ฅ ์์ ์ผ๋น ๋ฒ ์ด์ปจ ์๋ฅผ ๊ฐ์ง ์ฌ๋์ ์ฐพ์ต๋๋ค.
3) ์ ์ ๊ณ์ฐ
• ๊ฐ ์ฌ๋์ ์ผ๋น ๋ฒ ์ด์ปจ ์๋ฅผ ๊ณ์ฐํ์ฌ ์ต์ข ์ ์ผ๋ก ๊ฐ์ฅ ์์ ์ฌ๋์ ์ถ๋ ฅํฉ๋๋ค.
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)
minNum = sys.maxsize # ์ต์ ์ผ๋น ๋ฒ ์ด์ปจ ์๋ฅผ ์ด๊ธฐํ
minIdx = -1 # ์ต์ ์ผ๋น ๋ฒ ์ด์ปจ ์๋ฅผ ๊ฐ์ง ์ฌ๋์ ์ธ๋ฑ์ค๋ฅผ ์ด๊ธฐํ
# ๊ฐ ์ฌ๋์ ๋ํด BFS๋ฅผ ์ํํ์ฌ ์ผ๋น ๋ฒ ์ด์ปจ ์๋ฅผ ๊ณ์ฐ
for i in range(N):
dist = [-1] * N # ๊ฐ ์ฌ๋๊น์ง์ ๊ฑฐ๋ฆฌ๋ฅผ ์ ์ฅํ๋ ๋ฆฌ์คํธ, ์ด๊ธฐ๊ฐ -1
chk = [0] * N # ๋ฐฉ๋ฌธ ์ฌ๋ถ๋ฅผ ์ฒดํฌํ๋ ๋ฆฌ์คํธ
q = [i] # BFS๋ฅผ ์ํ ํ, ์์์ ์ i
chk[i] = 1 # ์์์ ๋ฐฉ๋ฌธ ์ฒดํฌ
dist[i] = 0 # ์์์ ์ ๊ฑฐ๋ฆฌ๋ 0
while len(q) > 0:
s = q.pop(0) # ํ์์ ํ๋์ ์ ์ ์ ๊บผ๋
for j in adj[s]: # ๊บผ๋ธ ์ ์ ๊ณผ ์ธ์ ํ ๋ชจ๋ ์ ์ ์ ๋ํด
if chk[j] == 0: # ์์ง ๋ฐฉ๋ฌธํ์ง ์์๋ค๋ฉด
chk[j] = 1 # ๋ฐฉ๋ฌธ ์ฒดํฌ
q.append(j) # ํ์ ์ถ๊ฐ
dist[j] = dist[s] + 1 # ๊ฑฐ๋ฆฌ ๊ฐฑ์ (ํ์ฌ ์ ์ ์ ๊ฑฐ๋ฆฌ + 1)
dNum = sum(dist) # ๋ชจ๋ ๊ฑฐ๋ฆฌ์ ํฉ (์ผ๋น ๋ฒ ์ด์ปจ ์)
if dNum < minNum: # ํ์ฌ์ ์ผ๋น ๋ฒ ์ด์ปจ ์๊ฐ ์ต์๊ฐ๋ณด๋ค ์๋ค๋ฉด
minNum = dNum # ์ต์๊ฐ ๊ฐฑ์
minIdx = i # ์ต์๊ฐ์ ๊ฐ์ง ์ฌ๋์ ์ธ๋ฑ์ค ๊ฐฑ์
print(minIdx + 1) # 1๋ถํฐ ์์ํ๋ ์ธ๋ฑ์ค๋ก ์ถ๋ ฅ
4. ์ฝ๋ ์ค๋ช
1) ์ ๋ ฅ ๋ฐ๊ธฐ
• ์ฒซ ๋ฒ์งธ ์ค์์ ์ฌ๋์ ์ N๊ณผ ์น๊ตฌ ๊ด๊ณ์ ์ M์ ์ ๋ ฅ๋ฐ์ต๋๋ค.
• M๊ฐ์ ์ค์ ๊ฑธ์ณ ์น๊ตฌ ๊ด๊ณ๋ฅผ ์ ๋ ฅ๋ฐ์ ์ธ์ ๋ฆฌ์คํธ adj์ ์ ์ฅํฉ๋๋ค.
2) BFS๋ฅผ ์ด์ฉํ ๊ฑฐ๋ฆฌ ๊ณ์ฐ
• ๊ฐ ์ฌ๋์ ์์์ ์ผ๋ก BFS๋ฅผ ์ํํ์ฌ ๋ค๋ฅธ ๋ชจ๋ ์ฌ๋๊น์ง์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํฉ๋๋ค.
• dist ๋ฆฌ์คํธ: ๊ฐ ์ฌ๋๊น์ง์ ๊ฑฐ๋ฆฌ๋ฅผ ์ ์ฅํ๋ ๋ฆฌ์คํธ๋ก, ์ด๊ธฐ๊ฐ์ -1์ ๋๋ค.
• chk ๋ฆฌ์คํธ: ๊ฐ ์ ์ ์ ๋ฐฉ๋ฌธ ์ฌ๋ถ๋ฅผ ์ฒดํฌํ๋ ๋ฆฌ์คํธ์ ๋๋ค.
• q ๋ฆฌ์คํธ: BFS๋ฅผ ์ํ ํ์ ๋๋ค.
3) ์ผ๋น ๋ฒ ์ด์ปจ ์ ๊ณ์ฐ
• BFS๋ฅผ ํตํด ๊ณ์ฐ๋ ๊ฑฐ๋ฆฌ๋ฅผ ๋ชจ๋ ๋ํด ์ผ๋น ๋ฒ ์ด์ปจ ์๋ฅผ ๊ตฌํฉ๋๋ค.
• ์ต์ ์ผ๋น ๋ฒ ์ด์ปจ ์์ ๊ทธ ์ฌ๋์ ์ธ๋ฑ์ค๋ฅผ ๊ฐฑ์ ํฉ๋๋ค.
4) ๊ฒฐ๊ณผ ์ถ๋ ฅ
• ์ต์ข ์ ์ผ๋ก ์ต์ ์ผ๋น ๋ฒ ์ด์ปจ ์๋ฅผ ๊ฐ์ง ์ฌ๋์ ๋ฒํธ๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
5. Github์ผ๋ก ํ์ธ
'๐ ์๊ณ ๋ฆฌ์ฆ > BOJ(๋ฐฑ์ค)_Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ(๋ฐฑ์ค) 1753[์ต๋จ๊ฒฝ๋ก] (0) | 2024.07.26 |
---|---|
BOJ(๋ฐฑ์ค) 11725[ํธ๋ฆฌ์ ๋ถ๋ชจ ์ฐพ๊ธฐ] (0) | 2024.07.25 |
BOJ(๋ฐฑ์ค) 11724[์ฐ๊ฒฐ ์์์ ๊ฐ์] (0) | 2024.07.22 |
BOJ(๋ฐฑ์ค) 14891[ํฑ๋๋ฐํด] (0) | 2024.07.20 |
BOJ(๋ฐฑ์ค) 5525[IOIOI] (0) | 2024.07.18 |