From b0c964626f7c1d1a374084124975d2b010d5f4ec Mon Sep 17 00:00:00 2001 From: heerucan Date: Sun, 27 Mar 2022 22:16:58 +0900 Subject: [PATCH] =?UTF-8?q?[=EC=BD=94=EB=94=A9=ED=85=8C=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=EC=B1=85]=2010-2.=20=EB=8F=84=EC=8B=9C=20=EB=B6=84=ED=95=A0=20?= =?UTF-8?q?=EA=B3=84=ED=9A=8D=20(#8)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...04\355\225\240\352\263\204\355\232\215.py" | 63 +++++++++++++++++++ ...44\353\246\254\355\201\230\353\237\274.py" | 2 + ...14\352\263\240\353\246\254\354\246\230.py" | 2 +- ...64\353\223\234\354\233\214\354\205\234.py" | 1 + 4 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 "CodingTest/CH10 \352\267\270\353\236\230\355\224\204 \354\235\264\353\241\240/\353\217\204\354\213\234\353\266\204\355\225\240\352\263\204\355\232\215.py" create mode 100644 "CodingTest/CH10 \352\267\270\353\236\230\355\224\204 \354\235\264\353\241\240/\354\273\244\353\246\254\355\201\230\353\237\274.py" diff --git "a/CodingTest/CH10 \352\267\270\353\236\230\355\224\204 \354\235\264\353\241\240/\353\217\204\354\213\234\353\266\204\355\225\240\352\263\204\355\232\215.py" "b/CodingTest/CH10 \352\267\270\353\236\230\355\224\204 \354\235\264\353\241\240/\353\217\204\354\213\234\353\266\204\355\225\240\352\263\204\355\232\215.py" new file mode 100644 index 0000000..e2e9f65 --- /dev/null +++ "b/CodingTest/CH10 \352\267\270\353\236\230\355\224\204 \354\235\264\353\241\240/\353\217\204\354\213\234\353\266\204\355\225\240\352\263\204\355\232\215.py" @@ -0,0 +1,63 @@ +# n: 집(노드) m: 길(간선) +# 유지비의 합을 최소로 -> 신장트리 바이브 + +# 7 12 +# 1 2 3 +# 1 3 2 +# 3 2 1 +# 2 5 2 +# 3 4 4 +# 7 3 6 +# 5 1 5 +# 1 6 2 +# 6 4 1 +# 6 5 3 +# 4 5 3 +# 6 7 4 + +def find_parent(parent, x): + if parent[x] != x: + parent[x] = find_parent(parent, parent[x]) + return parent[x] + +# 두 원소가 속한 집합을 합치기 +def union_parent(parent, a, b): + a = find_parent(parent, a) + b = find_parent(parent, b) + if a < b: + parent[b] = a + else: + parent[a] = b + +# 노드와 간선 개수 입력받기 +n, m = map(int, input().split()) +parent = [0]*(n+1) #부모 테이블 초기화 + +# 모든 간선을 담을 리스트와 최종 비용을 담을 변수 +edges = [] +result = 0 + +# 부모 테이블 상에서, 부모를 자기 자신으로 초기화 +for i in range(1, n+1): + parent[i] = i + +# 모든 간선에 대한 정보를 입력받기 +for _ in range(m): + a, b, cost = map(int, input().split()) + # 비용순으로 정렬하기 위해서 튜플의 첫 번째 원소를 비용으로 설정 + edges.append((cost, a, b)) + +# 간선을 비용순으로 정렬 +edges.sort() + +# 간선을 하나씩 확인하며 +for edge in edges: + cost, a, b = edge # edge에 cost, a, b 값을 넣어줌 + # 사이클이 발생하지 않는 경우에만 집합에 포함 - 최소한의 길만 만드는 것 + if find_parent(parent, a) != find_parent(parent, b): + union_parent(parent, a, b) + result += cost + print(result, cost) + totalResult = result - cost # 마지막 값 빼주기 + +print(totalResult) diff --git "a/CodingTest/CH10 \352\267\270\353\236\230\355\224\204 \354\235\264\353\241\240/\354\273\244\353\246\254\355\201\230\353\237\274.py" "b/CodingTest/CH10 \352\267\270\353\236\230\355\224\204 \354\235\264\353\241\240/\354\273\244\353\246\254\355\201\230\353\237\274.py" new file mode 100644 index 0000000..90d34e7 --- /dev/null +++ "b/CodingTest/CH10 \352\267\270\353\236\230\355\224\204 \354\235\264\353\241\240/\354\273\244\353\246\254\355\201\230\353\237\274.py" @@ -0,0 +1,2 @@ +n = int(input()) +for i in range(n): diff --git "a/CodingTest/CH10 \352\267\270\353\236\230\355\224\204 \354\235\264\353\241\240/\355\201\254\353\243\250\354\212\244\354\271\274\354\225\214\352\263\240\353\246\254\354\246\230.py" "b/CodingTest/CH10 \352\267\270\353\236\230\355\224\204 \354\235\264\353\241\240/\355\201\254\353\243\250\354\212\244\354\271\274\354\225\214\352\263\240\353\246\254\354\246\230.py" index e7a55fb..94c4b78 100644 --- "a/CodingTest/CH10 \352\267\270\353\236\230\355\224\204 \354\235\264\353\241\240/\355\201\254\353\243\250\354\212\244\354\271\274\354\225\214\352\263\240\353\246\254\354\246\230.py" +++ "b/CodingTest/CH10 \352\267\270\353\236\230\355\224\204 \354\235\264\353\241\240/\355\201\254\353\243\250\354\212\244\354\271\274\354\225\214\352\263\240\353\246\254\354\246\230.py" @@ -26,7 +26,7 @@ def union_parent(parent, a, b): # 모든 간선에 대한 정보를 입력받기 for _ in range(e): - a, b, cost = map(int input().split()) + a, b, cost = map(int, input().split()) # 비용순으로 정렬하기 위해서 튜플의 첫 번째 원소를 비용으로 설정 edges.append((cost, a, b)) diff --git "a/CodingTest/CH9 \341\204\216\341\205\254\341\204\203\341\205\241\341\206\253 \341\204\200\341\205\247\341\206\274\341\204\205\341\205\251/\355\224\214\353\241\234\354\235\264\353\223\234\354\233\214\354\205\234.py" "b/CodingTest/CH9 \341\204\216\341\205\254\341\204\203\341\205\241\341\206\253 \341\204\200\341\205\247\341\206\274\341\204\205\341\205\251/\355\224\214\353\241\234\354\235\264\353\223\234\354\233\214\354\205\234.py" index 1ee3824..9075f84 100644 --- "a/CodingTest/CH9 \341\204\216\341\205\254\341\204\203\341\205\241\341\206\253 \341\204\200\341\205\247\341\206\274\341\204\205\341\205\251/\355\224\214\353\241\234\354\235\264\353\223\234\354\233\214\354\205\234.py" +++ "b/CodingTest/CH9 \341\204\216\341\205\254\341\204\203\341\205\241\341\206\253 \341\204\200\341\205\247\341\206\274\341\204\205\341\205\251/\355\224\214\353\241\234\354\235\264\353\223\234\354\233\214\354\205\234.py" @@ -32,4 +32,5 @@ print("무한", end = ' ') else: print(graph[a][b], end=' ') + print() \ No newline at end of file