2022. 9. 15. 14:17γCoding Test/BOJ
πλ¬Έμ 보λ¬κ°κΈ°
λ¬Έμ μ€λͺ
n(2 ≤ n ≤ 100)κ°μ λμκ° μλ€. κ·Έλ¦¬κ³ ν λμμμ μΆλ°νμ¬ λ€λ₯Έ λμμ λμ°©νλ m(1 ≤ m ≤ 100,000)κ°μ λ²μ€κ° μλ€. κ° λ²μ€λ ν λ² μ¬μ©ν λ νμν λΉμ©μ΄ μλ€. λͺ¨λ λμμ μ (A, B)μ λν΄μ λμ Aμμ Bλ‘ κ°λλ° νμν λΉμ©μ μ΅μκ°μ ꡬνλ νλ‘κ·Έλ¨μ μμ±νμμ€.
μ λ ₯
첫째 μ€μ λμμ κ°μ nμ΄ μ£Όμ΄μ§κ³ λμ§Έ μ€μλ λ²μ€μ κ°μ mμ΄ μ£Όμ΄μ§λ€. κ·Έλ¦¬κ³ μ
μ§Έ μ€λΆν° m+2μ€κΉμ§ λ€μκ³Ό κ°μ λ²μ€μ μ λ³΄κ° μ£Όμ΄μ§λ€. λ¨Όμ μ²μμλ κ·Έ λ²μ€μ μΆλ° λμμ λ²νΈκ° μ£Όμ΄μ§λ€. λ²μ€μ μ 보λ λ²μ€μ μμ λμ a, λμ°© λμ b, ν λ² νλλ° νμν λΉμ© cλ‘ μ΄λ£¨μ΄μ Έ μλ€. μμ λμμ λμ°© λμκ° κ°μ κ²½μ°λ μλ€. λΉμ©μ 100,000λ³΄λ€ μκ±°λ κ°μ μμ°μμ΄λ€.
μμ λμμ λμ°© λμλ₯Ό μ°κ²°νλ λ
Έμ μ νλκ° μλ μ μλ€.
μΆλ ₯
nκ°μ μ€μ μΆλ ₯ν΄μΌ νλ€. iλ²μ§Έ μ€μ μΆλ ₯νλ jλ²μ§Έ μ«μλ λμ iμμ jλ‘ κ°λλ° νμν μ΅μ λΉμ©μ΄λ€. λ§μ½, iμμ jλ‘ κ° μ μλ κ²½μ°μλ κ·Έ μ리μ 0μ μΆλ ₯νλ€.
μμ μ μΆλ ₯
νμ΄ μ λ΅
μμ λμ A → λμ°© λμ Bλ‘ κ°λ λ
Έμ μ΄ μ¬λ¬ κ°μΌ μλ μλ€λ λΆλΆμ λͺ» λ΄μ νλ Έμλ€μ.
Floyd-Warshall μκ³ λ¦¬μ¦μ μ°λ λ¬Έμ λκ΅°μ. νκ΅ μκ³ λ¦¬μ¦ μμ
μκ°μ ν λ² λ€μλ κ² κ°μλ° κΈ°μ΅μ΄ μ λμ λ€μ μ΄ν΄λ΄€μμ΅λλ€. μ μ 리ν΄λμΌμ κΈμ΄ μμ΄μ λ€νμ΄μμ΅λλ€.
μ νμ΄κ³Όμ μμλ λ€μκ³Ό κ°μ΅λλ€.
- κ΅μ₯ν ν° μλ‘ μ΄λ£¨μ΄μ§ n X n 2μ°¨μ 리μ€νΈλ₯Ό μμ±
- Aλμμμ Bλμλ‘ κ°λ λΉμ©μ 2μ°¨μ 리μ€νΈμ μ
λ ₯ λ°κΈ°
- Aλμμμ Bλμλ‘ κ°λ λ Έμ μ μ¬λ¬ κ°κ° μμ μ μμΌλ―λ‘, κ·Έ μ€ κ°μ₯ μ μ λΉμ©μ μ ν
- νλ‘μ΄λ μκ³ λ¦¬μ¦ λμ
- μκΈ° μμ μκ² κ°λ λ Έμ μ μλ€κ³ νμΌλ―λ‘ 0 μ²λ¦¬
- κΈ°μ‘΄ λ Έμ λΉμ©κ³Ό κ²½μ μ§λ‘ λμκ°λ λ Έμ λΉμ© μ€ μμ κ²μ μ ν
- κ³μ°λ κ²°κ³Όκ°μ λ°νμΌλ‘ μΆλ ₯
- κ° μ μλ λμμ κ²½μ°(μ¦, μ΄κΈ°κ° κ·Έλλ‘λΌλ©΄) 0 μΆλ ₯
- μλλΌλ©΄ κ³μ°νλ μ΅μ λΉμ© μΆλ ₯
μμ€ μ½λ λ° κ²°κ³Ό
import sys
input = sys.stdin.readline
n = int(input()) # λμμ κ°μ (2μ΄μ 100 μ΄ν)
m = int(input()) # λ²μ€ κ°μ (1 μ΄μ 100,000 μ΄ν)
costTable = [[sys.maxsize] * n for _ in range(n)] # 2μ°¨μ 리μ€νΈ λ§λ€κΈ°
for _ in range(m): # μμ λμμμ λμ°© λμλ‘ κ°λ μ¬λ¬ λ
Έμ μ€ κ°μ₯ μμ λΉμ© λ
Έμ μ ν
startCity, aliveCity, cost = map(int, input().split())
costTable[startCity - 1][aliveCity - 1] = min(costTable[startCity - 1][aliveCity - 1], cost)
for wayPoint in range(n):
costTable[wayPoint][wayPoint] = 0 # μκΈ° μμ μκ² κ°λ λ
Έμ μ μμΌλ―λ‘ 0 μ²λ¦¬
for startCity in range(n):
for aliveCity in range(n):
originalRouteCost = costTable[startCity][aliveCity]
wayPointRouteCost = costTable[startCity][wayPoint] + costTable[wayPoint][aliveCity]
costTable[startCity][aliveCity] = min(originalRouteCost, wayPointRouteCost)
for costs in costTable:
for cost in costs:
if cost == sys.maxsize:
print(0, end = ' ')
else:
print(cost, end = ' ')
print()
sys.stdin.readlinμ μ²μ μ¨λ΄€λ€μ. μ΄κ² λ μ λ ₯ λ°λ μλκ° λΉ λ₯΄λ€κ³ νλκ΅°μ.
'Coding Test > BOJ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[BOJ] 10757λ² | ν° μ A+B (C++) (0) | 2023.04.08 |
---|---|
[BOJ] 2869λ² | λ¬ν½μ΄λ μ¬λΌκ°κ³ μΆλ€ (C++) (0) | 2023.04.07 |
[BOJ] 10610λ² | 30 (Python3) (0) | 2022.07.20 |
[BOJ] 13305λ² | μ£Όμ μ (Python3) (2) | 2022.07.14 |
[BOJ] 10162λ² | μ μλ μΈμ§ (Python3) (0) | 2022.07.14 |