🪴 Hayul's digital garden

Search

Search IconIcon to open search

전력망 둘로 나누기

Last updated Jan 11, 2023 Edit Source

# 문제 설명

n개의 송전탑이 전선을 통해 하나의 트리 형태로 연결되어 있습니다. 당신은 이 전선들 중 하나를 끊어서 현재의 전력망 네트워크를 2개로 분할하려고 합니다. 이때, 두 전력망이 갖게 되는 송전탑의 개수를 최대한 비슷하게 맞추고자 합니다.

송전탑의 개수 n, 그리고 전선 정보 wires가 매개변수로 주어집니다. 전선들 중 하나를 끊어서 송전탑 개수가 가능한 비슷하도록 두 전력망으로 나누었을 때, 두 전력망이 가지고 있는 송전탑 개수의 차이(절대값)를 return 하도록 solution 함수를 완성해주세요.


# 제한사항


# 입출력 예

nwiresresult
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

# 입출력 예 설명

입출력 예 #1

입출력 예 #2

입출력 예 #3

# 나의 풀이

 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
31
32
33
34
35
from collections import deque

def bfs(start, visited, graph):
    q = deque([start])
    n_connected = 1
    visited[start] = True
    
    while q:
        curr = q.popleft()
        
        for neighbor in graph[curr]:
            if not visited[neighbor]:
                n_connected += 1
                q.append(neighbor)
                visited[neighbor] = True
                
    return n_connected

def solution(n, wires):
    answer = n
    graph = [[] for _ in range(n+1)]
    
    for v1,v2 in wires:
        graph[v1].append(v2)
        graph[v2].append(v1)

    for start, end in wires:
        visited = [False]*(n+1)
        visited[end] = True
        result = bfs(start,visited,graph)
        if abs(result - (n-result)) < answer:
            answer = abs(result - (n-result))

    
    return answer