Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- DP
- 에라토스테네스의 체
- 재귀
- 크루스칼
- 그래프 이론
- 그리디
- 백트래킹
- 누적합
- 자료구조
- 다이나믹프로그래밍
- 그래프 탐색
- 트리
- 구현
- MST
- GROUP BY
- 해시
- 다시
- 투포인터
- 서브쿼리
- 시뮬레이션
- 다이나믹 프로그래밍
- 수학
- DFS
- BFS
- join
- 우선순위큐
- 다익스트라
- 분할정복
- 플로이드-워셜
- 브루트포스
Archives
- Today
- Total
기록하고 까먹지 말기
11404 본문
날짜 : 2023. 03. 22
사용 언어 : python
문제
코드
import sys
n = int(sys.stdin.readline()) # 도시 개수
m = int(sys.stdin.readline()) # 버스의 개수
graph = [[int(1e9)] * (n+1) for _ in range(n+1)] # 그래프 초기화
for _ in range(m):
a, b, c = map(int, sys.stdin.readline().split()) # 시작, 도착, 비용
graph[a][b] = min(graph[a][b], c) # a -> b 일 때 c의 비용 (같은 노선, 다른 비용 존재 가능)
for k in range(1, n+1): # 경유
for i in range(1, n+1): # 출발
for j in range(1, n+1): # 도착
if i == j: # 자기자신 -> 0
graph[i][j] = 0
else:
graph[i][j] = min(graph[i][j], graph[i][k] + graph[k][j])
for i in range(1, n+1):
for j in range(1, n + 1):
if graph[i][j] == int(1e9):
print(0, end=" ")
else: print(graph[i][j], end=" ")
print()
풀이
- 플로이드 워셜 알고리즘을 활용해 풀이한다.
알게된 점
- 예제에서 계속 틀리길래 확인해봤더니 입력부분에서 같은 경로상의 다른 비용인 버스가 있어서 이를 비교 후 최신화하는 과정을 생략했었다.
- 이후에 97%에서 틀리길래 유사 질문들을 확인해본 결과 도달할 수 없는 케이스(int(1e9) 출력)에 대하여 조건문을 붙이지 않았기 때문에 이를 수정 후 정답처리를 받을 수 있었다.
참고 사이트
- https://freedeveloper.tistory.com/385
[이것이 코딩 테스트다 with Python] 31강 플로이드 워셜 알고리즘
https://www.youtube.com/watch?v=hw-SvAR3Zqg&list=PLVsNizTWUw7H9_of5YCB0FmsSc-K44y81&index=31 플로이드 워셜 알고리즘 개요 모든 노드에서 다른 모든 노드까지의 최단 경로를 모두 계산한다 플로이드 워셜(Floyd-Warshall)
freedeveloper.tistory.com