728x90
📌 문제
https://swexpertacademy.com/main/main.do
📌 문제 접근 방법
- 다익스트라(dijkstra) 알고리즘을 활용한 풀이 (프림 알고리즘과 비슷)
- 방문하지 않은 지점 중에서 이동거리가 최소인 지점을 찾는다.
- 2의 지점과 인접한 지점 중에서 아직 방문하지 않은 지점에서 이동거리를 비교해서 갱신한다.
📌 코드
import sys
sys.stdin = open('input.txt')
def dijkstra(start):
distance[start] = 0
# 노드의 개수만큼 반복
for _ in range(N+1):
min_idx = -1
min_value = float('inf')
for i in range(N+1):
if not visited[i] and distance[i] < min_value:
min_idx = i
min_value = distance[i]
visited[min_idx] = 1
for i in range(N+1):
if mat[min_idx][i] and not visited[i]:
distance[i] = min(distance[i], distance[min_idx]+mat[min_idx][i])
T = int(input())
for t in range(1, T+1):
N, E = map(int, input().split())
edges = [list(map(int, input().split())) for _ in range(E)]
# 인접 행렬
mat = [[0 for _ in range(N+1)] for _ in range(N+1)]
for s, e, w in edges:
mat[s][e] = w
visited = [0 for _ in range(N+1)]
distance = [float('inf') for _ in range(N+1)]
dijkstra(0)
print('#{} {}'.format(t, distance[N]))
728x90
'ALGORITHM > SW Expert Academy' 카테고리의 다른 글
[SWEA/Python] 1251. 하나로 (0) | 2021.10.15 |
---|---|
[SWEA/Python] 2814. 최장 경로 (0) | 2021.10.15 |
[SWEA/Python] 5250. 최소 비용 (0) | 2021.10.15 |
[SWEA/Python] 5249. 최소 신장 트리 (0) | 2021.10.14 |
[SWEA/Python] 5248. 그룹 나누기 (0) | 2021.10.14 |
댓글