1def solution(n, wires):
2 tower = [[] for _ in range(n)]
3 answer = 100
4 for wire in wires:
5 wire[0] -= 1
6 wire[1] -= 1
7 tower[wire[0]].append(wire[1])
8 tower[wire[1]].append(wire[0])
9
10 def traverse(visited, start):
11 visited[start] = True
12 for i in tower[start]:
13 if not visited[i]:
14 traverse(visited, i)
15 for wire in wires:
16 tower[wire[0]].remove(wire[1])
17 tower[wire[1]].remove(wire[0])
18
19 visited = [False]*n
20 a = 0
21 traverse(visited, wire[0])
22 for i in range(n):
23 if visited[i]:
24 a += 1
25
26 visited = [False]*n
27 b = 0
28 traverse(visited, wire[1])
29 for i in range(n):
30 if visited[i]:
31 b += 1
32 answer = min(answer, abs(a-b))
33 tower[wire[0]].append(wire[1])
34 tower[wire[1]].append(wire[0])
35 return answer
문제
- n개의 송전탑이 전선을 통해 트리 형태로 연결되어 있다
- 전선 중 하나를 끊어서 전력망 네트워크를 2개로 분할하여 두 전력망이 갖게되는 송전탑의 개수를 최대한 비슷하게 맞추고자 한다
- 송전탑의 개수 n, 전선 정보를 담은 2차원 배열 wires가 주어진다
- 두 전력망이 가지는 송전탑의 개수 차이의 최솟값을 구하라
- TC
- input
n:9, wires:[[1,3],[2,3],[3,4],[4,5],[4,6],[4,7],[7,8],[7,9]]
- ouput
3
- input
해결방법
- 전선을 한개씩 끊어보면서 끊어진 두 위치를 시작으로 dfs탐색을 하여 visited 배열을 만들었다
- visited 배열을 이용하여 두 전력망이 가지는 송전탑의 개수 차이를 구하였다