π λ¬Έμ μ€λͺ
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 νλ©΄ λ©λλ€.
μ μΆλ ₯ μ
5 | [[1,2,1],[2,3,3],[5,2,2],[1,4,2],[5,3,1],[5,4,2]] | 3 | 4 |
6 | [[1,2,1],[1,3,2],[2,3,2],[3,4,3],[3,5,2],[3,5,3],[5,6,1]] | 4 | 4 |
μ μΆλ ₯ μ μ€λͺ
μ
μΆλ ₯ μ #1
λ¬Έμ μ μμμ κ°μ΅λλ€.
μ
μΆλ ₯ μ #2
μ£Όμ΄μ§ λ§μκ³Ό λλ‘μ λͺ¨μμ μλ κ·Έλ¦Όκ³Ό κ°μ΅λλ€.
1λ² λ§μμμ λ°°λ¬μ 4μκ° μ΄νκ° κ±Έλ¦¬λ λ§μμ [1, 2, 3, 5] 4κ°μ΄λ―λ‘ 4λ₯Ό return ν©λλ€.
π νμ΄ μ½λ
import heapq
def dijkstra(start, distance, graph):
heap = []
heapq.heappush(heap, (0, start))
distance[start] = 0
while heap:
dist, now = heapq.heappop(heap)
for i in graph[now]:
cost = dist + i[0]
if cost < distance[i[1]]:
distance[i[1]] = cost
heapq.heappush(heap, (cost, i[1]))
return distance
def solution(N, road, K):
INF = int(1e10)
distance = [INF for _ in range(N+1)]
graph = [[] for _ in range(N+1)]
for r in road:
atown, btown, time_cost = r
graph[atown].append([time_cost, btown])
graph[btown].append([time_cost, atown])
distance = dijkstra(1, distance, graph)
answer = len([dis for dis in distance[1:] if dis <= K])
return answer
λ€μ΅μ€νΈλΌλ‘ λ¬Έμ λ₯Ό ν΄κ²°νλ€. level2μΈ μ΄μ λ μ λͺ¨λ₯΄κ² λ€.. λ무 κΈ°λ³Ένμ΄λΌμ κ·Έλ°κ°?
μμ λ Έλλ‘λΆν° κ° λ ΈλκΉμ§μ μ΅λ¨κ±°λ¦¬λ₯Ό ꡬνλ λ¬Έμ μ΄κΈ° λλ¬Έμ λ€μ΅μ€νΈλΌλ₯Ό μ¬μ©νλ κ²μ΄ μ μΌ μ μ ν΄ λ³΄μλ€.
μΆλ°μ§λ‘λΆν°μ κ±°λ¦¬μΈ distance λ°°μ΄μ λͺ¨λ INFλ‘ μ΄κΈ°ννκ³ , μΈμ 리μ€νΈ graphλ₯Ό μμ±νλ€.
atownκ³Ό btownκ³Ό time_costλ₯Ό μΈμ 리μ€νΈμ [time_cost, town_name]μΌλ‘ μ½μ νλ€.
λ€μ΅μ€νΈλΌ μκ³ λ¦¬μ¦μ μμ νμ μ¬μ©νλ©°,
λ½μμ μΈμ λ Έλλ€ νμνκ³ , μΈμ λ Έλμ μ°κ²°λ κ°μ€μΉλ₯Ό λνλλ λ μμΌλ©΄ κ°±μ νκ³ νμ λ£μ΄ λ€μμ μ΄λμν€κ³ ,
λ ν¬λ©΄ κ·Έλ₯ λκΈ°λ λ°©μμΌλ‘ distance λ°°μ΄μ κ³μν΄μ μ λ°μ΄νΈνλ€.
μ΅μ’ μ μΌλ‘ Kλ³΄λ€ μμ λΉμ©μ κ°μ§ λ§μμ κ°μλ₯Ό μΈλ©΄ μ λ΅μ΄λ€.
'π μ½λ©ν μ€νΈ λλΉ : PS' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[νλ‘κ·Έλλ¨Έμ€] λλμ§ (level4, python) (0) | 2022.10.14 |
---|---|
[νλ‘κ·Έλλ¨Έμ€] μ€ν°μ»€ λͺ¨μΌκΈ°(2) (level3, python) (0) | 2022.10.14 |
[νλ‘κ·Έλλ¨Έμ€] μ¬ μ°κ²°νκΈ° (level3, python) (1) | 2022.10.13 |
[νλ‘κ·Έλλ¨Έμ€] μ€ μλ λ°©λ² (level2, python) (1) | 2022.10.13 |
[νλ‘κ·Έλλ¨Έμ€] κ°μ₯ λ¨Ό λ Έλ (level3, python) (0) | 2022.10.13 |