Search

๊ฐ•๋™์—ฐ

2.๋ฌธ์ œ์ด๋ฆ„
3. ์ˆ˜ํ–‰์‹œ๊ฐ„[์ดˆ(s)]
460
์ข‹์•„์š” ๋ˆ„๋ฅด๊ธฐ
์ข‹์•„์š” ์ˆ˜
: 0
5 more properties
| ์ฝ”๋“œ ์ž‘์„ฑํ•˜๊ธฐ
import heapq def dijkstra(start, graph, distance): q = [] heapq.heappush(q,(0, start)) distance[start] = 0 while q: dist, node = heapq.heappop(q) if distance[node] < dist: continue for x in graph[node]: cost = dist + x[1] if cost < distance[x[0]]: distance[x[0]] = cost heapq.heappush(q, (cost, x[0])) def solution(n, edge): INF = int(1e9) graph = [[] for _ in range(n+1)] distance = [INF] * (n+1) for a,b in edge: graph[a].append((b,1)) graph[b].append((a,1)) dijkstra(1, graph, distance) long_distance = max(distance[1:]) print(distance) return distance.count(long_distance)
Python
๋ณต์‚ฌ
| ์ฝ”๋“œ ์„ค๋ช…ํ•˜๊ธฐ
์ตœ๋‹จ๊ฒฝ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ์ด๋ฏ€๋กœ ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•˜์—ฌ ํ’€์ดํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.
1.
graph์™€ distance๋ฅผ ๊ฐ๊ฐ N+1๋งŒํผ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.
graph๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” ํฌ๊ฒŒ ์ธ์ ‘ํ–‰๋ ฌ๊ณผ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ ์ด๋ ‡๊ฒŒ 2๊ฐ€์ง€๊ฐ€ ์žˆ๋Š”๋ฐ, ์—ฌ๊ธฐ์„œ๋Š” ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ทธ๋ž˜ํ”„๋ฅผ ํ‘œํ˜„ํ•˜์˜€๋‹ค.
distance๋Š” 1๋ฒˆ ๋…ธ๋“œ๋ถ€ํ„ฐ ๊ฐ ๋…ธ๋“œ๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ๋ฅผ ์ €์žฅํ•  ๋ฐฐ์—ด๋กœ INF(๋ฌดํ•œ)์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.
N+1๊ฐœ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ด์œ ๋Š” ๋…ธ๋“œ๋ฒˆํ˜ธ๊ฐ€ 1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋’ค์—์„œ ์ข€ ๋” ๊ฐ€๋…์„ฑ ์ข‹์€ ์ฝ”๋“œ๋ฅผ ์“ฐ๊ธฐ ์œ„ํ•ด์„œ์ด๋‹ค. ๊ทธ๋ž˜์„œ 0๋ฒˆ์งธ ๋ฐฐ์—ด์€ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค.
2.
์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์„ ์–ธํ•˜๊ณ  (์‹œ์ž‘๋…ธ๋“œ์˜ ๊ฑฐ๋ฆฌ, ์‹œ์ž‘๋…ธ๋“œ)๋ฅผ ํ์— ๋„ฃ์–ด์ค€๋‹ค.
๋งค ๋‹จ๊ณ„๋งˆ๋‹ค ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ ์ค‘์—์„œ ๊ฐ€์žฅ ๊ฑฐ๋ฆฌ๊ฐ€ ์งง์€ ๋…ธ๋“œ๋ฅผ ์„ ํƒํ•ด์•ผ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์ด ๋•Œ, ์šฐ์„  ์ˆœ์œ„์˜ ๊ธฐ์ค€์€ ํŠœํ”Œ์˜ 0๋ฒˆ์งธ ์ธ๋ฑ์Šค(=๊ฑฐ๋ฆฌ)์ด๋‹ค.
3.
ํ๊ฐ€ ๋นŒ๋•Œ๊นŒ์ง€ ๋‹ค์Œ์„ ๋ฐ˜๋ณตํ•œ๋‹ค.
a.
ํ์—์„œ ๊ฐ€์žฅ ๊ฑฐ๋ฆฌ๊ฐ€ ์งง์€ ๋…ธ๋“œ(node)๋ฅผ ๋ฝ‘๋Š”๋‹ค.
b.
๋งŒ์•ฝ ํ˜„์žฌ ๊ฑฐ๋ฆฌ ๋ฆฌ์ŠคํŠธ(distance)์—์„œ ํ•ด๋‹น ๋…ธ๋“œ์˜ ๊ฑฐ๋ฆฌ(distance[node])๊ฐ€ ๋ฝ‘์€ ๋…ธ๋“œ์˜ ๊ฑฐ๋ฆฌ(dist)๋ณด๋‹ค ๋” ์ž‘๋‹ค๋ฉด ์ด๋ฏธ ๋ฐฉ๋ฌธํ–ˆ๋‹ค๋Š” ์˜๋ฏธ์ด๋ฏ€๋กœ ์•„๋ž˜๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๊ณ  ๋„˜์–ด๊ฐ„๋‹ค.
c.
๋ฝ‘์€ ๋…ธ๋“œ์™€ ์ธ์ ‘ํ•˜๊ฒŒ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ๋“ค์„ for๋ฌธ์„ ๋Œ๋ฉด์„œ ์ˆœํšŒํ•œ๋‹ค.
i.
ํ˜„์žฌ ๋…ธ๋“œ(node)๋ฅผ ๊ฑฐ์ณ์„œ ๊ฐ€๋Š” ๊ฒฝ์šฐ์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ cost์— ์ €์žฅํ•œ๋‹ค.
ii.
๋งŒ์•ฝ, ํ˜„์žฌ ๊ฑฐ๋ฆฌ ๋ฆฌ์ŠคํŠธ(distance)๋ณด๋‹ค cost๊ฐ€ ์ž‘๋‹ค๋ฉด ๊ฑฐ๋ฆฌ ๋ฆฌ์ŠคํŠธ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•ด์ฃผ๊ณ , ํ์— (cost, n)๋ฅผ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.
4.
distance์—์„œ ์ตœ๋Œ“๊ฐ’์„ ์ฐพ๊ณ  countํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ตœ๋Œ“๊ฐ’์ด ๋ช‡ ๊ฐœ์ธ์ง€ ์ฐพ๋Š”๋‹ค.