๐กsolutions )
๐ฌ ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ ๋ก์ง
๐ฌ ์ฒ์ ์์ํ๋ ๋ ธ๋ 1์์์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ 0์ผ๋ก ์ด๊ธฐํ
๐ฌ ์ธ์ ํ๋ ฌ ๋ง๋ค๊ณ -> heappush๋ฅผ ํตํด ์ต๋จ ๊ฑฐ๋ฆฌ ์์ผ๋ก ์ ๋ ฌ -> ์ต๋จ ๊ฑฐ๋ฆฌ๊ฐ ๋ ๋๋ง๋ค ๊ฑฐ๋ฆฌ๋ฅผ ์ ์ฅํด ๋๋ ๋ฆฌ์คํธ์ธ dis ์ ๋ฐ์ดํธ
๐จ๐ปcode )
import heapq
def dijkstra(dis, adj):
heap = []
heapq.heappush(heap, [0, 1])
while heap:
cost, node = heapq.heappop(heap)
for c, n in adj[node]:
if cost + c < dis[n]:
dis[n] = cost + c
heapq.heappush(heap, [cost + c, n])
def solution(N, road, K):
INF = float('inf')
dis = [INF] * (N + 1)
dis[1] = 0 # ๋ง์ 1 ์ด๊ธฐํ
adj = [[] for _ in range(N + 1)]
for r in road:
adj[r[0]].append([r[2], r[1]])
adj[r[1]].append([r[2], r[0]])
dijkstra(dis, adj)
return len([x for x in dis if x <= K])
๐description )
>๋ฌธ์ ์ค๋ช
N๊ฐ์ ๋ง์๋ก ์ด๋ฃจ์ด์ง ๋๋ผ๊ฐ ์์ต๋๋ค. ์ด ๋๋ผ์ ๊ฐ ๋ง์์๋ 1๋ถํฐ N๊น์ง์ ๋ฒํธ๊ฐ ๊ฐ๊ฐ ํ๋์ฉ ๋ถ์ฌ๋์ด ์์ต๋๋ค. ๊ฐ ๋ง์์ ์๋ฐฉํฅ์ผ๋ก ํตํํ ์ ์๋ ๋๋ก๋ก ์ฐ๊ฒฐ๋์ด ์๋๋ฐ, ์๋ก ๋ค๋ฅธ ๋ง์ ๊ฐ์ ์ด๋ํ ๋๋ ์ด ๋๋ก๋ฅผ ์ง๋์ผ ํฉ๋๋ค. ๋๋ก๋ฅผ ์ง๋ ๋ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ๋๋ก๋ณ๋ก ๋ค๋ฆ ๋๋ค. ํ์ฌ 1๋ฒ ๋ง์์ ์๋ ์์์ ์์ ๊ฐ ๋ง์๋ก ์์ ๋ฐฐ๋ฌ์ ํ๋ ค๊ณ ํฉ๋๋ค. ๊ฐ ๋ง์๋ก๋ถํฐ ์์ ์ฃผ๋ฌธ์ ๋ฐ์ผ๋ ค๊ณ ํ๋๋ฐ, N๊ฐ์ ๋ง์ ์ค์์ K ์๊ฐ ์ดํ๋ก ๋ฐฐ๋ฌ์ด ๊ฐ๋ฅํ ๋ง์์์๋ง ์ฃผ๋ฌธ์ ๋ฐ์ผ๋ ค๊ณ ํฉ๋๋ค. ๋ค์์ N = 5, K = 3์ธ ๊ฒฝ์ฐ์ ์์์ ๋๋ค.
์ ๊ทธ๋ฆผ์์ 1๋ฒ ๋ง์์ ์๋ ์์์ ์ [1, 2, 4, 5] ๋ฒ ๋ง์๊น์ง๋ 3 ์ดํ์ ์๊ฐ์ ๋ฐฐ๋ฌํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ 3๋ฒ ๋ง์๊น์ง๋ 3์๊ฐ ์ด๋ด๋ก ๋ฐฐ๋ฌํ ์ ์๋ ๊ฒฝ๋ก๊ฐ ์์ผ๋ฏ๋ก 3๋ฒ ๋ง์์์๋ ์ฃผ๋ฌธ์ ๋ฐ์ง ์์ต๋๋ค. ๋ฐ๋ผ์ 1๋ฒ ๋ง์์ ์๋ ์์์ ์ด ๋ฐฐ๋ฌ ์ฃผ๋ฌธ์ ๋ฐ์ ์ ์๋ ๋ง์์ 4๊ฐ๊ฐ ๋ฉ๋๋ค.
๋ง์์ ๊ฐ์ N, ๊ฐ ๋ง์์ ์ฐ๊ฒฐํ๋ ๋๋ก์ ์ ๋ณด road, ์์ ๋ฐฐ๋ฌ์ด ๊ฐ๋ฅํ ์๊ฐ K๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ์์ ์ฃผ๋ฌธ์ ๋ฐ์ ์ ์๋ ๋ง์์ ๊ฐ์๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
>์ ํ์ฌํญ
- ๋ง์์ ๊ฐ์ N์ 1 ์ด์ 50 ์ดํ์ ์์ฐ์์ ๋๋ค.
- road์ ๊ธธ์ด(๋๋ก ์ ๋ณด์ ๊ฐ์)๋ 1 ์ด์ 2,000 ์ดํ์ ๋๋ค.
- road์ ๊ฐ ์์๋ ๋ง์์ ์ฐ๊ฒฐํ๊ณ ์๋ ๊ฐ ๋๋ก์ ์ ๋ณด๋ฅผ ๋ํ๋ ๋๋ค.
- road๋ ๊ธธ์ด๊ฐ 3์ธ ๋ฐฐ์ด์ด๋ฉฐ, ์์๋๋ก (a, b, c)๋ฅผ ๋ํ๋
๋๋ค.
- a, b(1 ≤ a, b ≤ N, a != b)๋ ๋๋ก๊ฐ ์ฐ๊ฒฐํ๋ ๋ ๋ง์์ ๋ฒํธ์ด๋ฉฐ, c(1 ≤ c ≤ 10,000, c๋ ์์ฐ์)๋ ๋๋ก๋ฅผ ์ง๋๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ๋๋ค.
- ๋ ๋ง์ a, b๋ฅผ ์ฐ๊ฒฐํ๋ ๋๋ก๋ ์ฌ๋ฌ ๊ฐ๊ฐ ์์ ์ ์์ต๋๋ค.
- ํ ๋๋ก์ ์ ๋ณด๊ฐ ์ฌ๋ฌ ๋ฒ ์ค๋ณตํด์ ์ฃผ์ด์ง์ง ์์ต๋๋ค.
- K๋ ์์ ๋ฐฐ๋ฌ์ด ๊ฐ๋ฅํ ์๊ฐ์ ๋ํ๋ด๋ฉฐ, 1 ์ด์ 500,000 ์ดํ์ ๋๋ค.
- ์์์ ๋ ๋ง์๊ฐ์ ํญ์ ์ด๋ ๊ฐ๋ฅํ ๊ฒฝ๋ก๊ฐ ์กด์ฌํฉ๋๋ค.
- 1๋ฒ ๋ง์์ ์๋ ์์์ ์ด K ์ดํ์ ์๊ฐ์ ๋ฐฐ๋ฌ์ด ๊ฐ๋ฅํ ๋ง์์ ๊ฐ์๋ฅผ return ํ๋ฉด ๋ฉ๋๋ค.