[프로그래머스 Lv2] 전력망을 둘로 나누기(python)

이진규·2022년 9월 26일
1

프로그래머스(PYTHON)

목록 보기
58/64

문제

https://school.programmers.co.kr/learn/courses/30/lessons/86971

나의 코드

"""

"""

from itertools import combinations
from collections import deque
                
def solution(n, wires):
    
    def bfs(x):
        visited[x] = True
        connected_cnt = 1
        q = deque([x])

        while q:
            node = q.popleft()

            for i in graph[node]:
                if not visited[i]:
                    visited[i] = True
                    connected_cnt += 1
                    q.append(i)

        return connected_cnt

    cases = list(combinations(wires, len(wires)-1)) # 1개 끊은 결과
    answer = [] # 연결된 탑의 개수의 차이
    
    for case in cases:
        graph = [ [] for _ in range(n+1) ]
        visited = [False] * (n+1)
        
        for a, b in case:
            graph[a].append(b)
            graph[b].append(a)
        
        cnt_list = [] # 연결된 탑의 개수
        
        for i in range(1, n+1):
            if not visited[i]:
                cnt_list.append(bfs(i))
                
        answer.append(abs(cnt_list[0] - cnt_list[1]))
        
    return min(answer)
    

설명

완전탐색 + BFS 문제

참고 자료

profile
항상 궁금해하고 공부하고 기록하자.

0개의 댓글