티스토리 뷰

코딩테스트

플로이드

ajaa 2024. 12. 22. 19:24

📌문제

n개의 도시가 있고, 한 도시에서 출발하여 다른 도시에 도착하는 m개의 버스가 있다. 각 버스는 한 번 사용할 때 필요한 비용이 있다. 모든 도시의 쌍에 대해서 도시 A에서 B로 가는데 필요한 비용의 최솟값을 구하시오.

 

📌풀이

도시 A에서 B로 가는 간선이 여러개일 경우 비용이 짧은 간선만 고려

초기에 간선 정보를 입력받을 때 가장 짧은 간선 정보만 저장한 후 플로이드 워셜 알고리즘 수행

 

📌코드

INF = int(1e9)  # 무한

# 노드의 개수, 간선의 개수 입력
n = int(input())
m = int(input())

# 2차원 리스트(그래프)를 만들고 무한으로 초기화
graph = [[INF] * (n + 1) for _ in range(n + 1)]

# 자기 자신에서 자기 자신으로 가는 비용 0
for a in range(1, n + 1):
    for b in range(1, n + 1):
        if a == b:
            graph[a][b] == 0


for _ in range(m):
    # A에서 B로 가는 비용 C라고 설정
    a, b, c = map(int, input().split())
    # 가장 짧은 간선 정보만 저장
    if c < graph[a][b]:
        graph[a][b] = c

# 플로이드 워셜 알고리즘
for k in range(1, n + 1):
    for a in range(1, n + 1):
        for b in range(1, n + 1):
            graph[a][b] = min(graph[a][b], graph[a][k] + graph[k][b])

for a in range(1, n + 1):
    for b in range(1, n + 1):
        if graph[a][b] == INF:
            print(0, end=" ")
        else:
            print(graph[a][b], end=" ")

    print()

 

📌참고

https://g.co/kgs/eyd5SSd

 

이것이 취업을 위한 코딩 테스트다 with 파이썬

IT 취준생이라면 누구나 입사하고 싶은 카카오・삼성전자・네이버・라인!취업의 성공 열쇠는 알고리즘 인터뷰에 있다! IT 취준생이라면 누구나 가고 싶어 하는 카카오, 라인, 삼성전자의 2016년

www.google.com

 

 

'코딩테스트' 카테고리의 다른 글

숨바꼭질  (0) 2024.12.26
화성 탐사  (1) 2024.12.23
편집 거리  (0) 2024.12.21
못생긴 수  (1) 2024.12.20
병사 배치하기  (0) 2024.12.18
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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
글 보관함