n개의 송전탑이 전선을 통해 하나의 트리 형태로 연결되어 있습니다. 당신은 이 전선들 중 하나를 끊어서 현재의 전력망 네트워크를 2개로 분할하려고 합니다. 이때, 두 전력망이 갖게 되는 송전탑의 개수를 최대한 비슷하게 맞추고자 합니다.
송전탑의 개수 n, 그리고 전선 정보 wires가 매개변수로 주어집니다. 전선들 중 하나를 끊어서 송전탑 개수가 가능한 비슷하도록 두 전력망으로 나누었을 때, 두 전력망이 가지고 있는 송전탑 개수의 차이(절대값)를 return 하도록 solution 함수를 완성해주세요.
n-1
인 정수형 2차원 배열입니다.n | wires | result |
---|---|---|
9 | [[1,3],[2,3],[3,4],[4,5],[4,6],[4,7],[7,8],[7,9]] | 3 |
4 | [[1,2],[2,3],[3,4]] | 0 |
7 | [[1,2],[2,7],[3,7],[3,4],[4,5],[6,7]] | 1 |
def DFS(node,graph,visited,linked):
cnt = 1
visited[node] = True
for g in graph[node]:
# 방문처리가 안됐는데 연결되어 있는 경우
if visited[g] == False and linked[node][g]:
cnt += DFS(g,graph,visited,linked)
return cnt
def solution(n, wires):
answer = int(1e9) # MAX
graph = [[] for _ in range(n+1)]
linked = [[True]*(n+1) for _ in range(n+1)] # 트리 연결 여부
# 트리 생성
for a,b in wires:
graph[a].append(b)
graph[b].append(a)
for a,b in wires:
visited = [False] * (n+1) # 노드 방문 여부
linked[a][b] = False #연결 끊기
cnt_a = DFS(a,graph,visited,linked)
cnt_b = DFS(b,graph,visited,linked)
linked[a][b] = True
answer = min(answer,abs(cnt_a-cnt_b))
return answer
DFS를 이용