Search

๊ฐ•๋™์—ฐ

2.๋ฌธ์ œ์ด๋ฆ„
3. ์ˆ˜ํ–‰์‹œ๊ฐ„[์ดˆ(s)]
206
์ข‹์•„์š” ๋ˆ„๋ฅด๊ธฐ
์ข‹์•„์š” ์ˆ˜
: 0
5 more properties
| ์ฝ”๋“œ ์ž‘์„ฑํ•˜๊ธฐ
import heapq def solution(N, road, K): INF = int(1e9) graph = [[] for _ in range(N+1)] distance = [INF] * (N+1) for a,b,c in road: graph[a].append([b, c]) graph[b].append([a, c]) q = [] heapq.heappush(q,(0,1)) distance[1] = 0 while q: dist, node = heapq.heappop(q) if distance[node] < dist: continue for n,d in graph[node]: cost = d + dist if cost < distance[n]: distance[n] = cost heapq.heappush(q, (cost, n)) answer = 0 for i in range(1,N+1): if distance[i] <= K: answer += 1 return answer
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)๋ฅผ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.