문제를 어떤 방식으로 해결하려 했는지 그 과정을 적어주세요. 초기에 접근한 방법과 최종 접근이 차이가 없으면 한개만 적어도 됩니다.
어떤 알고리즘 또는 기법을 사용해 문제를 해결했는지 알려주세요
N = int(input())
# 입력과 동시에 배열에 숫자 넣기
arr = [list(map(int, input().split())) for i in range(N)]
v_list = [] # (ver1, ver2, len)
for i in range(N):
for j in range(i):
v_list.append((i+1, j+1, arr[i][j]))
# 거리 기준으로 정렬
v_list = sorted(v_list, key = lambda vertex:vertex[2])
# 집합 형태로 저장해둘 배열
sets = []
for i in range(N):
sets.append({i+1})
# v_list 돌면서 연결되어있는 두 노드가 같은 위치의 집합에 있는지 확인
res = 0
for vertex in v_list:
first, second, dist = vertex
flag = True
first_index = None
second_index = None
for s in range(len(sets)):
# 각각의 위치 기록해줌
if first in sets[s]:
first_index = s
if second in sets[s]:
second_index = s
# 같은 위치에 있으면 그냥 넘기고 (순환?되면 안되니깐!)
if(first_index != None and first_index == second_index):
flag = False
break
# 각 노드가 들어가있던 거 하나로 합쳐주기
if flag == True:
sets[first_index] = sets[first_index].union(sets[second_index])
sets.pop(second_index)
res += dist
# 모든 노드들이 하나의 배열에 다 들어가있따면 종료
if len(sets[0]) == N:
break
print(res)
솔루션에 접근하기 까지 아쉬웠던 부분 들을 적어주세요. 솔루션을 참조하고나서야 고친 점들을 적어주세요. 솔루션의 링크도 적어주세요. 막힘 없이 구현했다면, 생략해도 좋습니다.
해당 문제를 통해 배운 내용 들을 적어주세요. 어떤 알고리즘, 코딩 기법,자료구조 등을 알게됐다. 문법적 요소도 좋습니다. 크게 없으면 생략해도 좋습니다.