programmers > 코딩테스트 연습 > 위클리 챌린지 > 전력망을 둘로 나누기
풀이 코드
주어진 입력 트리에서 간선 하나를 끊어 두개의 그룹으로 나눈다. 그리고 나눠진 그룹간의 노드 수 차이가 가장 적은 값을 찾는 문제이다. 이 문제에서는 송전탑의 개수 n의 최댓값이 100이기 때문에(숫자가 작아서) 모든 간선을 하나씩 끊어보고 dfs로 정답을 찾았다.
from collections import defaultdict
def dfs(start, visit):
global cnt
visit.append(start)
cnt += 1
for i in tree[start]:
if i not in visit:
dfs(i, visit)
def solution(n, wires):
global tree, cnt
tree = defaultdict(list)
answer = 1e9
for x, y in wires:
tree[x].append(y)
tree[y].append(x)
for x, y in wires:
# 끊을 전선
tree[x].remove(y)
tree[y].remove(x)
# 끊은 전선을 시작점으로 해서 dfs를 돌려본다
cnt = 0
dfs(1, [])
answer = min(answer, abs(n - (cnt*2)))
# 끊은 전선 복구
tree[x].append(y)
tree[y].append(x)
return answer
'Algorithm' 카테고리의 다른 글
[leetcode]1315. Sum of Nodes with Even-Valued Grandparent _ python3 (0) | 2021.12.06 |
---|---|
[leetcode] 35. Search Insert Position _ python3 (0) | 2021.12.06 |
[leetcode] 203. Remove Linked List Elements _ python3 (0) | 2021.12.06 |
[leetcode] 1413. Minimum Value to Get Positive Step by Step Sum _ python3 (0) | 2021.12.06 |
알고리즘 공부를 시작해보자 (1) | 2021.12.05 |