일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 데이터베이스
- 시나공
- 백준 알고리즘
- 코딩봉사
- 정보처리산업기사
- 백준알고리즘
- 소프티어
- 코틀린
- 프로그래머스
- kotlin
- BFS
- 알고리즘
- 자바
- SW봉사
- 백준
- SQL
- 파이썬
- 1과목
- 문제풀이
- C++
- CJ UNIT
- MYSQL
- python
- 코딩교육봉사
- java
- 스프링
- softeer
- 회고
- 공부일지
- programmers
Archives
- Today
- Total
JIE0025
[플로이드워셜] 11404번 - 플로이드 - python, 골드4 본문
728x90
https://www.acmicpc.net/problem/11404
플로이드 개념 공부+코드이해를 하자마자 대놓고 똑같은 문제여서 그냥 복습이 바로 된 느낌이다.
특수한 개념은 없지만 고려해야할점은
0. 도시 == 노드, 버스 == 간선이라는 것을 알고
1. 시작 도시와 도착 도시를 연결하는 노선은 하나가 아닐 수 있다. >> 이걸 잘 처리해주면 되는 문제!
(예제 입력을 보면 1에서 4로가는 간선이 여러개가 있었다)
2. 만약, i에서 j로 갈 수 없는 경우에는 그 자리에 0을 출력한다. >> 마지막에 INF이면 0출력
💻 내가 쓴 정답 CODE
#플로이드 백준 11404 골드4
import sys
input = sys.stdin.readline
INF = sys.maxsize
n = int(input()) #도시의 개수 (노드)
m = int(input()) #버스의 개수 (간선)
dist = [[INF]*n for _ in range(n)]
for i in range(n):
dist[i][i] = 0
for _ in range(m) :
start, end, cost = map(int,input().split())
if dist[start-1][end-1] > cost:
dist[start-1][end-1] = cost
for k in range(n):
for i in range(n):
for j in range(n):
if dist[i][j] > dist[i][k] + dist[k][j]:
dist[i][j] = dist[i][k] + dist[k][j]
#출력
for i in range(n):
for k in range(n):
if(dist[i][k] == INF):
print(0,end=' ')
else:
print(dist[i][k], end=' ')
print()
내일 플로이드 관련문제 하나 더 풀어보고
다익스트라 공부도 해야겠다.
내일 참고할 블로그!
https://it-garden.tistory.com/241
'Algorithm > 백준' 카테고리의 다른 글
[▲][다익스트라] 1446번 지름길 - python, 실버1 (0) | 2023.02.01 |
---|---|
[구현][브론즈2] 럭키 스트레이트 - 파이썬(Python) (0) | 2023.01.29 |
[BFS] 7576번 - 토마토 - python, 골드5 (0) | 2023.01.23 |
[BFS] 4963번 - 섬의 개수 - python, 실버2 (0) | 2023.01.23 |
[BFS] 1012번 - 유기농 배추 - python, 실버2 (0) | 2023.01.23 |