Algorithm/ํ๋ก๊ทธ๋๋จธ์ค
[ํ๋ก๊ทธ๋๋จธ์ค / Python] ๊ฐ์ฅ ๋จผ ๋ ธ๋
meeeeejin
2021. 4. 5. 16:20
๋ฌธ์ ๋งํฌ: programmers.co.kr/learn/courses/30/lessons/49189
๋ฌธ์ ์ค๋ช
1๋ฒ ๋ ธ๋๋ก๋ถํฐ ๊ฐ์ฅ ๋ฉ๋ฆฌ ๋จ์ด์ง ๋ ธ๋์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ ๋ฌธ์ ์ ๋๋ค.
1๋ฒ ๋ ธ๋๋ถํฐ BFS๋ฅผ ์ํํ๋ฉฐ 1๋ฒ ๋ ธ๋์์ distance๋ฅผ ์ ์ฅํ ๋ค, distance๊ฐ ๊ฐ์ฅ ํฐ ๊ฐ์ ๊ฐ๋ ์์์ ๊ฐ์๋ฅผ ๋ฐํํ๋๋ก ์ฝ๋๋ฅผ ์์ฑํ์ต๋๋ค.
- ์ธ์ ๋ ธ๋ ์ ๋ณด๋ฅผ ์ ์ฅํ graph์ 1๋ฒ ๋ ธ๋๋ก๋ถํฐ์ ๊ฑฐ๋ฆฌ๋ฅผ ์ ์ฅํ distance ์ด๊ธฐํ
- ์ฃผ์ด์ง edge ์ ๋ณด๋ฅผ graph์ ์ ์ฅ
- 1๋ฒ ๋ ธ๋์ distance๋ฅผ 0์ผ๋ก ํ๊ณ , 1๋ฒ ๋ ธ๋๋ฅผ ํ์ ์ฝ์ (BFS ์์)
- ํ์์ ์์๋ฅผ ํ๋ ๊บผ๋ด๊ณ (v) ํด๋น ์์์ ๋ฐฉ๋ฌธํ์ง ์์ ์ธ์ ๋
ธ๋(x)๊ฐ ์๋ค๋ฉด
1) ํด๋น ์ธ์ ๋ ธ๋(x)์ distance๋ฅผ ๋ถ๋ชจ ๋ ธ๋(v)์ (distance + 1)๋ก ๊ฐฑ์ // ๋ฐฉ๋ฌธ์ฒ๋ฆฌ๋ฅผ ํฌํจ
2) ํ์ x ๋ ธ๋ ์ฝ์ - 4๋ฒ๊ณผ์ ์ ํ๊ฐ ๋น ๋๊น์ง ๋ฐ๋ณต (BFS ์ํ)
- BFS ์ํ์ด ๋๋๋ฉด distance์ ์ต๋๊ฐ์ ๊ฐ๋ ์์์ ๊ฐ์ ๋ฐํ
์์ค์ฝ๋
from collections import deque
def bfs(start, graph, distance):
distance[start] = 0
queue = deque([start])
while queue:
v = queue.popleft()
for x in graph[v]: # ๋ฐฉ๋ฌธํ์ง ์์ ์ธ์ ๋
ธ๋ ๋ฐฉ๋ฌธ
if distance[x] == -1:
# ํ์ฌ ๋
ธ๋์ ๊ฑฐ๋ฆฌ = ๋ถ๋ชจ ๋
ธ๋์ ๊ฑฐ๋ฆฌ + 1
distance[x] = distance[v] + 1
queue.append(x)
def solution(n, edge):
answer = 0
graph = [[] for _ in range(n + 1)]
distance = [-1] * (n + 1)
# ์ธ์ ํ ๋
ธ๋ ์ ๋ณด๋ฅผ graph์ ์ ์ฅ
for (v1, v2) in edge:
graph[v1].append(v2)
graph[v2].append(v1)
bfs(1, graph, distance)
answer = distance.count(max(distance))
return answer
728x90