레벨3 문제
그리디
import heapq
def solution(n, costs):
arr = [[0] * n for _ in range(n)]
edge_list = []
cost = 0
for i in costs:
arr[i[0]][i[1]] = i[2]
arr[i[1]][i[0]] = i[2]
check = [False] * n
check[0] = True
# 0번 노드에 연결된 엣지들 넣어주기
for i in range(n):
if (arr[0][i] != 0):
heapq.heappush( edge_list, [arr[0][i], 0, i] )
while ( False in check ):
long, h, w = heapq.heappop(edge_list)
print(h, w, long)
# 이미 방문한 노드라면 지나가기
if ( check[h] == True and check[w] == True ):
continue
# 둘중에 어떤 노드로 방문할지 결정 (w 처음 방문)
if ( check[h] == True and check[w] == False ):
check[w] = True
cost += long
for i in range(n):
if (arr[w][i] != 0):
heapq.heappush(edge_list, [arr[w][i], w, i])
# h 처음 방문
else:
check[h] = True
cost += long
for i in range(n):
if (arr[h][i] != 0):
heapq.heappush(edge_list, [arr[h][i], h, i])
return cost
1번 노드에서 시작해서, 가장 짧은 edge로 이동함