본문 바로가기
알고리즘/소스코드

PROGRAMMERS 42861: 섬 연결하기

by cjw.git 2021. 7. 18.

Link : https://programmers.co.kr/learn/courses/30/lessons/42861


Python

더보기
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
32
33
34
35
36
37
38
39
import heapq
 
 
def prim(start, graph):
    result = 0
    # 방문 확인을 위한 변수
    visited = [False for _ in range(len(graph))]
    task = []
    # 첫 시작점에서 갈 수 있는 범위를 등록
    for end, cost in enumerate(graph[start]):
        if cost != 0:
            heapq.heappush(task, (cost, (start, end)))
 
    # heap이 빌 때까지 반복
    while len(task):
        # 가장 작은 비용의 s -> e를 가져옴
        cost, (s, e) = heapq.heappop(task)
 
        # 둘중에 한곳이라도 방문이 안되어있으면
        if visited[s] == False or visited[e] == False:
            # 방문처리를 해주고
            visited[s] = visited[e] = True
            # 코스트를 증가
            result += cost
 
            # 다른 방문점을 추가시킨다.
            for end, cost in enumerate(graph[e]):
                if cost != 0:  # 코스트가 0이 아니면서
                    if not visited[end]:  # 방문한 지점이 아니면
                        heapq.heappush(task, (cost, (e, end)))  # 추가
    return result
 
 
def solution(n, costs):
    graph = [[0 for _ in range(n)] for _ in range(n)]
    for s, e, c in costs:
        graph[s][e] = c
        graph[e][s] = c
    return prim(0, graph)
cs

FeedBack

  1.  

 

 

 

cjw.git@gmail.com

댓글