-
[Python] ๋ฐฑ์ค 18352 ํน์ ๊ฑฐ๋ฆฌ์ ๋์ ์ฐพ๊ธฐ (Dijkstra)๐ป Algorithm/Python 2022. 7. 8. 23:40
๐ ๋ฌธ์
์ด๋ค ๋๋ผ์๋ 1๋ฒ๋ถํฐ N๋ฒ๊น์ง์ ๋์์ M๊ฐ์ ๋จ๋ฐฉํฅ ๋๋ก๊ฐ ์กด์ฌํ๋ค. ๋ชจ๋ ๋๋ก์ ๊ฑฐ๋ฆฌ๋ 1์ด๋ค.
์ด ๋ ํน์ ํ ๋์ X๋ก๋ถํฐ ์ถ๋ฐํ์ฌ ๋๋ฌํ ์ ์๋ ๋ชจ๋ ๋์ ์ค์์, ์ต๋จ ๊ฑฐ๋ฆฌ๊ฐ ์ ํํ K์ธ ๋ชจ๋ ๋์๋ค์ ๋ฒํธ๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ๋ํ ์ถ๋ฐ ๋์ X์์ ์ถ๋ฐ ๋์ X๋ก ๊ฐ๋ ์ต๋จ ๊ฑฐ๋ฆฌ๋ ํญ์ 0์ด๋ผ๊ณ ๊ฐ์ ํ๋ค.
์๋ฅผ ๋ค์ด N=4, K=2, X=1์ผ ๋ ๋ค์๊ณผ ๊ฐ์ด ๊ทธ๋ํ๊ฐ ๊ตฌ์ฑ๋์ด ์๋ค๊ณ ๊ฐ์ ํ์.
์ด ๋ 1๋ฒ ๋์์์ ์ถ๋ฐํ์ฌ ๋๋ฌํ ์ ์๋ ๋์ ์ค์์, ์ต๋จ ๊ฑฐ๋ฆฌ๊ฐ 2์ธ ๋์๋ 4๋ฒ ๋์ ๋ฟ์ด๋ค. 2๋ฒ๊ณผ 3๋ฒ ๋์์ ๊ฒฝ์ฐ, ์ต๋จ ๊ฑฐ๋ฆฌ๊ฐ 1์ด๊ธฐ ๋๋ฌธ์ ์ถ๋ ฅํ์ง ์๋๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ๋์์ ๊ฐ์ N, ๋๋ก์ ๊ฐ์ M, ๊ฑฐ๋ฆฌ ์ ๋ณด K, ์ถ๋ฐ ๋์์ ๋ฒํธ X๊ฐ ์ฃผ์ด์ง๋ค. (2 ≤ N ≤ 300,000, 1 ≤ M ≤ 1,000,000, 1 ≤ K ≤ 300,000, 1 ≤ X ≤ N) ๋์งธ ์ค๋ถํฐ M๊ฐ์ ์ค์ ๊ฑธ์ณ์ ๋ ๊ฐ์ ์์ฐ์ A, B๊ฐ ๊ณต๋ฐฑ์ ๊ธฐ์ค์ผ๋ก ๊ตฌ๋ถ๋์ด ์ฃผ์ด์ง๋ค. ์ด๋ A๋ฒ ๋์์์ B๋ฒ ๋์๋ก ์ด๋ํ๋ ๋จ๋ฐฉํฅ ๋๋ก๊ฐ ์กด์ฌํ๋ค๋ ์๋ฏธ๋ค. (1 ≤ A, B ≤ N) ๋จ, A์ B๋ ์๋ก ๋ค๋ฅธ ์์ฐ์์ด๋ค.
์ถ๋ ฅ
X๋ก๋ถํฐ ์ถ๋ฐํ์ฌ ๋๋ฌํ ์ ์๋ ๋์ ์ค์์, ์ต๋จ ๊ฑฐ๋ฆฌ๊ฐ K์ธ ๋ชจ๋ ๋์์ ๋ฒํธ๋ฅผ ํ ์ค์ ํ๋์ฉ ์ค๋ฆ์ฐจ์์ผ๋ก ์ถ๋ ฅํ๋ค.
์ด ๋ ๋๋ฌํ ์ ์๋ ๋์ ์ค์์, ์ต๋จ ๊ฑฐ๋ฆฌ๊ฐ K์ธ ๋์๊ฐ ํ๋๋ ์กด์ฌํ์ง ์์ผ๋ฉด -1์ ์ถ๋ ฅํ๋ค.
์์ ์ ๋ ฅ 1
4 4 2 1 1 2 1 3 2 3 2 4
์์ ์ถ๋ ฅ 1
4
์์ ์ ๋ ฅ 2
4 3 2 1 1 2 1 3 1 4
์์ ์ถ๋ ฅ 2
-1
์์ ์ ๋ ฅ 3
4 4 1 1 1 2 1 3 2 3 2 4
์์ ์ถ๋ ฅ 3
2 3
๐ ํ์ด
๐ฌ Code
import sys, heapq input = sys.stdin.readline INF = float('inf') def dijkstra(start): q = [] heapq.heappush(q, (0, start)) distance[start] = 0 while q: dist, now = heapq.heappop(q) if dist > distance[now]: continue for i in graph[now]: cost = dist + i[1] if cost < distance[i[0]]: distance[i[0]] = cost heapq.heappush(q, (cost, i[0])) n, m, k, start = map(int, input().split()) graph = [[] for _ in range(n+1)] distance = [INF] * (n+1) for _ in range(m): a, b = map(int, input().split()) graph[a].append((b, 1)) dijkstra(start) isNone = 1 for i in range(1, n+1): if distance[i] == k: isNone = 0 print(i) if isNone: print(-1)
๐ก Solution
BFS๋ก๋ ํ ์ ์๋ ๋ฌธ์ ์ง๋ง ๋ค์ต์คํธ๋ผ๋ฅผ ๋ฐฐ์ด ๊น์ ๋ค์ต์คํธ๋ผ๋ก ํ์ด๋ณด์์ต๋๋ค.
'๐ป Algorithm > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] ํ๋ก๊ทธ๋๋จธ์ค ๊ฑฐ๋ฆฌ๋๊ธฐ ํ์ธํ๊ธฐ (๊ตฌํ) (0) 2022.07.08 [Python] ๋ฐฑ์ค 11265 ๋๋์ง ์๋ ํํฐ (Floyd-Warshall) (0) 2022.07.08 [Python] ๋ฐฑ์ค 11000 ๊ฐ์์ค ๋ฐฐ์ (Heapq) (0) 2022.07.08 [Python] ๋ฐฑ์ค 3107 IPv6 (String) (0) 2022.07.08 [Python] ๋ฐฑ์ค 13022 ๋๋์ ์ฌ๋ฐ๋ฅธ ๋จ์ด (String) (0) 2022.07.08