~๋ชฉ์ฐจ~
๋ฌธ์
https://school.programmers.co.kr/learn/courses/30/lessons/49189
๋ฌธ์ ํด๊ฒฐ ํฌ์ธํธ
- BFS์ ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ ๋ ๊ฐ์ง ํ์ด ๋ฐฉ์์ผ๋ก ํด๊ฒฐ (DFS๋ ๊ฐ๋ฅํ๋ python์ DFS ํจ์จ์ด ์ข์ง ๋ชป ํจ)
์์ธํ ์ค๋ช ์ ์ฃผ์ ์ฐธ๊ณ
์์ฑ ์ฝ๋
BFS ํ์ด
from collections import deque
def solution(n, edge):
que = deque() # BFS๋ฅผ ์ํ ํ
graph = [[] for _ in range(n + 1)] # ์ธ์ ๋ฆฌ์คํธ
visited = [0] * (n + 1) # ๋ฐฉ๋ฌธ ํ์ & ๊ฑฐ๋ฆฌ๋ฅผ ์ ์ฅ
for v1, v2 in edge:
graph[v1].append(v2)
graph[v2].append(v1)
que.append((1, 0)) # 1๋ฒ ๋
ธ๋, ๊ฑฐ๋ฆฌ 0
visited[1] = -1 # 1๋ฒ ๋
ธ๋ ๋ฐฉ๋ฌธ ํ์
while que: # BFS
q = que.popleft()
for v in graph[q[0]]:
if not visited[v]: # v๋
ธ๋์ ๋ฐฉ๋ฌธํ ์ ์ด ์๋ค๋ฉด(๊ธฐ๋ก๋ ์ ์ด ์๋ค๋ฉด)
visited[v] = q[1] + 1 # ๊ฑฐ๋ฆฌ + 1
que.append((v, q[1] + 1))
return visited.count(max(visited))
๋ค์ต์คํธ๋ผ ํ์ด
import heapq # ์ฐ์ ์์ ํ๋ฅผ ์ํ ํ
INF = int(1e9) # ๋ฌดํ์
def solution(n, edge):
graph = [[] for _ in range(n+1)] # ์ฐ๊ฒฐ ๋ฆฌ์คํธ
distance = [INF]*(n+1) # ํน์ ๋
ธ๋๋ก๋ถํฐ ๊ฐ ๋
ธ๋์ ์ต์ ๊ฑฐ๋ฆฌ ์ด๊ธฐํ
for v1, v2 in edge: # ์ฐ๊ฒฐ ๋ฆฌ์คํธ ์ด๊ธฐํ
graph[v1].append(v2)
graph[v2].append(v1)
def dijkstra(start): # ๋ค์ต์คํธ๋ผ ํจ์
distance[start] = 0 # ์์ ๋
ธ๋ ๊ฑฐ๋ฆฌ 0
q = []
heapq.heappush(q, (0, start)) # ์ฐ์ ์์ ํ ์ด๊ธฐํ
while q: # ํ์ ๊ฐ์ด ์์ ๋์
dist, now = heapq.heappop(q)
if distance[now] < dist: # ๋ฐฉ๋ฌธํ๋ ๋
ธ๋๋ผ๋ฉด
continue
for i in graph[now]: # ๋ฐฉ๋ฌธํ์ง ์์ ๋
ธ๋์ ์ฐ๊ฒฐ ๋
ธ๋ ๋ฐฉ๋ฌธ
cost = dist + 1 # ๋ชจ๋ ๊ฐ์ ๊ธธ์ด๋ 1
if distance[i] > cost: # ๊ณ์ฐํ ๊ฑฐ๋ฆฌ๊ฐ ๋ ์งง๋ค๋ฉด
distance[i] = cost # ๊ฑฐ๋ฆฌ ์
๋ฐ์ดํธ
heapq.heappush(q, (cost, i)) # ์ฐ์ ์์ ํ ์ฝ์
dijkstra(1) # 1 ๋
ธ๋๋ก๋ถํฐ ๊ฐ ๋
ธ๋๊ฐ ๋จ์ด์ง ๊ฑฐ๋ฆฌ
return distance.count(max(distance[1:]))
๋์์ด ๋์ จ๋ค๋ฉด ์ข์์ ๋๋ฌ์ฃผ์ธ์๐