๐ ๋ฌธ์
์ผ๋น ๋ฒ ์ด์ปจ์ 6๋จ๊ณ ๋ฒ์น์ ์ํ๋ฉด ์ง๊ตฌ์ ์๋ ๋ชจ๋ ์ฌ๋๋ค์ ์ต๋ 6๋จ๊ณ ์ด๋ด์์ ์๋ก ์๋ ์ฌ๋์ผ๋ก ์ฐ๊ฒฐ๋ ์ ์๋ค. ์ผ๋น ๋ฒ ์ด์ปจ ๊ฒ์์ ์์์ ๋ ์ฌ๋์ด ์ต์ ๋ช ๋จ๊ณ ๋ง์ ์ด์ด์ง ์ ์๋์ง ๊ณ์ฐํ๋ ๊ฒ์์ด๋ค.
์๋ฅผ ๋ค๋ฉด, ์ ํ ์๊ด์์ ๊ฒ ๊ฐ์ ์ธํ๋ํ๊ต์ ์ด๊ฐํธ์ ์๊ฐ๋ํ๊ต์ ๋ฏผ์ธํฌ๋ ๋ช ๋จ๊ณ๋ง์ ์ด์ด์ง ์ ์์๊น?
์ฒ๋ฏผํธ๋ ์ด๊ฐํธ์ ๊ฐ์ ํ๊ต์ ๋ค๋๋ ์ฌ์ด์ด๋ค. ์ฒ๋ฏผํธ์ ์ต๋ฐฑ์ค์ Baekjoon Online Judge๋ฅผ ํตํด ์๊ฒ ๋์๋ค. ์ต๋ฐฑ์ค๊ณผ ๊น์ ์์ ๊ฐ์ด Startlink๋ฅผ ์ฐฝ์ ํ๋ค. ๊น์ ์๊ณผ ๊น๋ํ์ ๊ฐ์ ํ๊ต ๋์๋ฆฌ ์์์ด๋ค. ๊น๋ํ๊ณผ ๋ฏผ์ธํฌ๋ ๊ฐ์ ํ๊ต์ ๋ค๋๋ ์ฌ์ด๋ก ์๋ก ์๊ณ ์๋ค. ์ฆ, ์ด๊ฐํธ-์ฒ๋ฏผํธ-์ต๋ฐฑ์ค-๊น์ ์-๊น๋ํ-๋ฏผ์ธํฌ ์ ๊ฐ์ด 5๋จ๊ณ๋ง ๊ฑฐ์น๋ฉด ๋๋ค.
์ผ๋น ๋ฒ ์ด์ปจ์ ๋ฏธ๊ตญ ํ๋ฆฌ์ฐ๋ ์ํ๋ฐฐ์ฐ๋ค ๋ผ๋ฆฌ ์ผ๋น ๋ฒ ์ด์ปจ ๊ฒ์์ ํ์๋ ๋์ค๋ ๋จ๊ณ์ ์ด ํฉ์ด ๊ฐ์ฅ ์ ์ ์ฌ๋์ด๋ผ๊ณ ํ๋ค.
์ค๋์ Baekjoon Online Judge์ ์ ์ ์ค์์ ์ผ๋น ๋ฒ ์ด์ปจ์ ์๊ฐ ๊ฐ์ฅ ์์ ์ฌ๋์ ์ฐพ์ผ๋ ค๊ณ ํ๋ค. ์ผ๋น ๋ฒ ์ด์ปจ ์๋ ๋ชจ๋ ์ฌ๋๊ณผ ์ผ๋น ๋ฒ ์ด์ปจ ๊ฒ์์ ํ์ ๋, ๋์ค๋ ๋จ๊ณ์ ํฉ์ด๋ค.
์๋ฅผ ๋ค์ด, BOJ์ ์ ์ ๊ฐ 5๋ช ์ด๊ณ , 1๊ณผ 3, 1๊ณผ 4, 2์ 3, 3๊ณผ 4, 4์ 5๊ฐ ์น๊ตฌ์ธ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํด๋ณด์.1์ 2๊น์ง 3์ ํตํด 2๋จ๊ณ ๋ง์, 3๊น์ง 1๋จ๊ณ, 4๊น์ง 1๋จ๊ณ, 5๊น์ง 4๋ฅผ ํตํด์ 2๋จ๊ณ ๋ง์ ์ ์ ์๋ค. ๋ฐ๋ผ์, ์ผ๋น ๋ฒ ์ด์ปจ์ ์๋ 2+1+1+2 = 6์ด๋ค.
2๋ 1๊น์ง 3์ ํตํด์ 2๋จ๊ณ ๋ง์, 3๊น์ง 1๋จ๊ณ ๋ง์, 4๊น์ง 3์ ํตํด์ 2๋จ๊ณ ๋ง์, 5๊น์ง 3๊ณผ 4๋ฅผ ํตํด์ 3๋จ๊ณ ๋ง์ ์ ์ ์๋ค. ๋ฐ๋ผ์, ์ผ๋น ๋ฒ ์ด์ปจ์ ์๋ 2+1+2+3 = 8์ด๋ค.
3์ 1๊น์ง 1๋จ๊ณ, 2๊น์ง 1๋จ๊ณ, 4๊น์ง 1๋จ๊ณ, 5๊น์ง 4๋ฅผ ํตํด 2๋จ๊ณ ๋ง์ ์ ์ ์๋ค. ๋ฐ๋ผ์, ์ผ๋น ๋ฒ ์ด์ปจ์ ์๋ 1+1+1+2 = 5์ด๋ค.
4๋ 1๊น์ง 1๋จ๊ณ, 2๊น์ง 3์ ํตํด 2๋จ๊ณ, 3๊น์ง 1๋จ๊ณ, 5๊น์ง 1๋จ๊ณ ๋ง์ ์ ์ ์๋ค. 4์ ์ผ๋น ๋ฒ ์ด์ปจ์ ์๋ 1+2+1+1 = 5๊ฐ ๋๋ค.
๋ง์ง๋ง์ผ๋ก 5๋ 1๊น์ง 4๋ฅผ ํตํด 2๋จ๊ณ, 2๊น์ง 4์ 3์ ํตํด 3๋จ๊ณ, 3๊น์ง 4๋ฅผ ํตํด 2๋จ๊ณ, 4๊น์ง 1๋จ๊ณ ๋ง์ ์ ์ ์๋ค. 5์ ์ผ๋น ๋ฒ ์ด์ปจ์ ์๋ 2+3+2+1 = 8์ด๋ค.
5๋ช ์ ์ ์ ์ค์์ ์ผ๋น ๋ฒ ์ด์ปจ์ ์๊ฐ ๊ฐ์ฅ ์์ ์ฌ๋์ 3๊ณผ 4์ด๋ค.BOJ ์ ์ ์ ์์ ์น๊ตฌ ๊ด๊ณ๊ฐ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ก์ ๋, ์ผ๋น ๋ฒ ์ด์ปจ์ ์๊ฐ ๊ฐ์ฅ ์์ ์ฌ๋์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
๐์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ ์ ์ ์ N (2 ≤ N ≤ 100)๊ณผ ์น๊ตฌ ๊ด๊ณ์ ์ M (1 ≤ M ≤ 5,000)์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค๋ถํฐ M๊ฐ์ ์ค์๋ ์น๊ตฌ ๊ด๊ณ๊ฐ ์ฃผ์ด์ง๋ค.
์น๊ตฌ ๊ด๊ณ๋ A์ B๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ, A์ B๊ฐ ์น๊ตฌ๋ผ๋ ๋ป์ด๋ค. A์ B๊ฐ ์น๊ตฌ์ด๋ฉด, B์ A๋ ์น๊ตฌ์ด๋ฉฐ, A์ B๊ฐ ๊ฐ์ ๊ฒฝ์ฐ๋ ์๋ค. ์น๊ตฌ ๊ด๊ณ๋ ์ค๋ณต๋์ด ๋ค์ด์ฌ ์๋ ์์ผ๋ฉฐ, ์น๊ตฌ๊ฐ ํ ๋ช ๋ ์๋ ์ฌ๋์ ์๋ค.
๋, ๋ชจ๋ ์ฌ๋์ ์น๊ตฌ ๊ด๊ณ๋ก ์ฐ๊ฒฐ๋์ด์ ธ ์๋ค. ์ฌ๋์ ๋ฒํธ๋ 1๋ถํฐ N๊น์ง์ด๋ฉฐ, ๋ ์ฌ๋์ด ๊ฐ์ ๋ฒํธ๋ฅผ ๊ฐ๋ ๊ฒฝ์ฐ๋ ์๋ค.
๐์ถ๋ ฅ
์ฒซ์งธ ์ค์ BOJ์ ์ ์ ์ค์์ ์ผ๋น ๋ฒ ์ด์ปจ์ ์๊ฐ ๊ฐ์ฅ ์์ ์ฌ๋์ ์ถ๋ ฅํ๋ค. ๊ทธ๋ฐ ์ฌ๋์ด ์ฌ๋ฌ ๋ช ์ผ ๊ฒฝ์ฐ์๋ ๋ฒํธ๊ฐ ๊ฐ์ฅ ์์ ์ฌ๋์ ์ถ๋ ฅํ๋ค.
๐ ๋ฌธ์ ํด์
๊ทธ๋ํ ํ์์ ํตํด ๊ฐ๊ฐ์ ๋ ธ๋ ๋ฐฉ๋ฌธ์์๋ฅผ ๋ํ ๋ฐ์ดํฐ๋ฅผ ๋ฐฐ์ด์ ๋ด์๋ค์ ๊ทธ ๋ฐฐ์ด์ ์ต์๊ฐ์ ๊ฐ์ง๋ ๋ ธ๋๋ฅผ ์ถ๋ ฅํ๋ค.
๐ป ์ฝ๋
import sys
from collections import deque
input = sys.stdin.readline
def bfs(v, visited):
queue = deque()
queue.append([v,0]) # ๋
ธ๋์ ๋ฐฉ๋ฌธ์์
visited[v] = True # ๋ฐฉ๋ฌธ์ฒ๋ฆฌ
ans = 0 # ๊ฐ๊ฐ์ ๋ฐฉ๋ฌธ์์๋ฅผ ๋ํ ๋ณ์
while queue:
k,cnt = queue.popleft()
ans += cnt # ๋ฐฉ๋ฌธ ์์ ๋ํจ
for i in graph[k]: # ์ด์ํ ๋
ธ๋์ค
if not visited[i]: # ๋ฐฉ๋ฌธํ์ง ์์๋ค๋ฉด
visited[i] = True # ๋ฐฉ๋ฌธ์ฒ๋ฆฌ
queue.append([i,cnt+1]) # ํ์ ์ฝ์
return ans # v์ ์ผ๋น ๋ฒ ์ด์ปจ์ ์
n,m = map(int,input().rstrip().split())
graph = [[] for _ in range(n+1)]
for _ in range(m):
a,b = map(int,input().rstrip().split())
# ์ค๋ณต ์
๋ ฅ์ด ๊ฐ๋ฅํ๋ค๊ธฐ์ ์ค๋ณต ์ฒดํฌํด์ค
if b not in graph[a]:
graph[a].append(b)
if a not in graph[b]:
graph[b].append(a)
res = [] # ๋ชจ๋ ๋
ธ๋์ ์ผ๋น ๋ฒ ์ด์ปจ์ ์๋ฅผ ๋ด์ ๋ฐฐ์ด
for f in range(1, n+1): # 1๋ฒ ๋
ธ๋๋ถํฐ n๋ฒ ๋
ธ๋๊น์ง ๋ฐฉ๋ฌธ
visited = [False for _ in range(n+1)]
res.append(bfs(f, visited)) # ์ผ๋น ๋ฒ ์ด์ปจ์ ์ ์ฝ์
print(res.index(min(res))+1) # ์ต์๊ฐ์ ์ธ๋ฑ์ค ์ถ๋ ฅ (+1 ํ ์ด์ ๋ 1๋ฒ๋
ธ๋๋ถํฐ ์์ํ๊ธฐ๋๋ฌธ)
๐ ๋ฌธ์ ๋งํฌ ์ผ๋น ๋ฒ ์ด์ปจ์ 6๋จ๊ณ ๋ฒ์น
'Problem Solving > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 17451๋ฒ: ํํ ์ฐ์ฃผ - ํ์ด์ฌ (0) | 2022.06.26 |
---|---|
[๋ฐฑ์ค] 1260๋ฒ: DFS์ BFS - ํ์ด์ฌ (0) | 2022.06.25 |
[๋ฐฑ์ค] 17626๋ฒ: Four Squares - ํ์ด์ฌ (0) | 2022.06.20 |
[๋ฐฑ์ค] 11403๋ฒ: ๊ฒฝ๋ก ์ฐพ๊ธฐ - ํ์ด์ฌ (0) | 2022.06.19 |
[๋ฐฑ์ค] 5430๋ฒ: AC - ํ์ด์ฌ (0) | 2022.06.16 |