백준 1922- 네트워크 연결
파이썬을 이용해 풀이를 했다 
이전에 최소 스패닝 문제를 풀었는데 같은 문제라는 것을 알 수 있었다
최소 스패닝 트리
주어진 그래프의 모든 정점들을 연결하는 부분 그래프 중에서 그 가중치의 값이 최소인 트리를 말한다
문제 풀이
최소 스패닝을 풀기 위해서 다음과 같은 과정을 거쳤다
연결된 노드 a, 노드 b, 가중치 c가 주어질 때 각 노드별로 [가중치, 연결된 값] 정보를 저장해준다
첫번째 값인 [가중치 0, node 1]을 우선순위큐의 첫번째 값으로 초기화 해준다
우선순위큐에서 가중치가 가장 낮은 값을 꺼내고 만일 방문한 적이 없는 노드라면 현재 노드로 설정하고 방문처리를 해준다
현재 노드에 연결된 [가중치, 다음노드] 값들을 우선순위 큐에 추가해준다
3, 4번 반복
cnt(거쳐온 노드 갯수)가 N 값과 같다면 반복문을 멈추고 answer(최소 가중치 합)을 출력한다
코드
import heapq
from collections import defaultdict
def solution():
    N = int(input())
    M = int(input())
    C = defaultdict(list)
    
    for _ in range(M):
        a, b, c = map(int, input().split())
        C[a].append([c, b])
        C[b].append([c, a])
    heap = [[0, 1]]   
    visited = defaultdict(bool)
    answer, cnt = 0, 0
    while heap:
        now = heapq.heappop(heap)
        weight, node = now[0], now[1]
        if cnt == N:
            break
        
        if not visited[node] :
            visited[node] = True
            cnt += 1
            answer += weight
            for next in C[node]:
                heapq.heappush(heap, next)
    
    print(answer)
solution()

쟌쟌쟌
옛날에는 코드만 작성하고 끝났는데
면접에서 코테 때 짠 코드에 대해 설명하고 리팩토링을 해보라는 경우가 있었어서 정말 멘붕이 왔었다 흑흑...
그래서 앞으로는 왜 해당 자료구조/알고리즘을 썼는지에 대한 이유를 정리해보고
코드에 대해서도 절차적으로 설명 하는 연습을 해야겠다고 다짐했다