일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 백트랙킹
- java #자바 #동빈나
- css #생활코딩 #웹
- 백준
- 투포인터
- react #리액트 #동빈나 #나동빈 #유튜브강의
- dp
- react #리액트 #동빈나
- 파이썬 #알고리즘 #코딩테스트 #프로그래머스
- 다익스트라
- 백준 #알고리즘 #파이썬 #코딩테스트
- java #자바 #나동빈
- java #자바 #생활코딩
- 알고리즘
- 재귀
- Dijkstra
- DFS
- java #자바
- 자바 #java
- PYTHON
- 프로그래머스
- 프로그래머스 #파이썬 #알고리즘 #코딩테스트
- 다이나믹프로그래밍
- 프로그래머스 #파이썬 #코딩테스트 #알고리즘
- 코딩테스트
- css #웹 #생활코딩
- 백준 #파이썬 #알고리즘 #코딩테스트
- BFS
- 파이썬
- 파이썬 #백준 #알고리즘 #코딩테스트
Archives
- Today
- Total
커리까지
[백준] 6497번 전력난 파이썬 본문
728x90
SMALL
문제
성진이는 한 도시의 시장인데 거지라서 전력난에 끙끙댄다. 그래서 모든 길마다 원래 켜져 있던 가로등 중 일부를 소등하기로 하였다. 길의 가로등을 켜 두면 하루에 길의 미터 수만큼 돈이 들어가는데, 일부를 소등하여 그만큼의 돈을 절약할 수 있다.
그러나 만약 어떤 두 집을 왕래할 때, 불이 켜져 있지 않은 길을 반드시 지나야 한다면 위험하다. 그래서 도시에 있는 모든 두 집 쌍에 대해, 불이 켜진 길만으로 서로를 왕래할 수 있어야 한다.
위 조건을 지키면서 절약할 수 있는 최대 액수를 구하시오.
입력
입력은 여러 개의 테스트 케이스로 구분되어 있다.
각 테스트 케이스의 첫째 줄에는 집의 수 m과 길의 수 n이 주어진다. (1 ≤ m ≤ 200000, m-1 ≤ n ≤ 200000)
이어서 n개의 줄에 각 길에 대한 정보 x, y, z가 주어지는데, 이는 x번 집과 y번 집 사이에 양방향 도로가 있으며 그 거리가 z미터라는 뜻이다. (0 ≤ x, y < m, x ≠ y)
도시는 항상 연결 그래프의 형태이고(즉, 어떤 두 집을 골라도 서로 왕래할 수 있는 경로가 있다), 도시상의 모든 길의 거리 합은 231미터보다 작다.
입력의 끝에서는 첫 줄에 0이 2개 주어진다.
출력
각 테스트 케이스마다 한 줄에 걸쳐 절약할 수 있는 최대 비용을 출력한다.
예제 입력 1 복
7 11
0 1 7
0 3 5
1 2 8
1 3 9
1 4 7
2 4 5
3 4 15
3 5 6
4 5 8
4 6 9
5 6 11
0 0
예제 출력 1 복사
51
제출답안
import sys
input = sys.stdin.readline
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
while True:
v, e = map(int, input().split())
if v == 0 and e == 0:
break
parent = [i for i in range(v)]
edges = []
result = 0
for _ in range(e):
a, b, cost = map(int, input().split())
edges.append((cost, a, b))
edges.sort()
for edge in edges:
cost, a, b = edge
if find_parent(parent, a) != find_parent(parent, b):
union_parent(parent, a, b)
else:
result += cost
print(result)
부모를 찾는 함수 생성
부모를 같게 해주는 함수 생성
필요한 값들을 입력 받고 비용을 기준으로 정렬
만약에 부모가 다르면 부모를 통일해주고 사이클이 발생하면 도로를 설치하지 않기 때문에 비용을 더한다.
728x90
LIST
'알고리즘 > 풀이' 카테고리의 다른 글
[백준] 11502번 세 개의 소수 문제 파이썬 (0) | 2021.06.17 |
---|---|
[프로그래머스] 2020 KAKAO BLIND 자물쇠와 열쇠 파이썬 (0) | 2021.06.14 |
[프로그래머스] 카카오 블라인드 2018 추석 트래픽 파이썬 (0) | 2021.06.06 |
[백준] 1916번 최소비용 구하기 파이썬 (0) | 2021.05.27 |
[프로그래머스] 2018 카카오 3차 압축 (0) | 2021.05.23 |
Comments