문제 링크
풀이
- 모든 연결 선에 대하여 끊고 bfs로 연결된 개수를 구한 후 차이의 최솟값 갱신
from collections import deque
def bfs(start,graph,visited):
visited[start] = True
# 연결된 노드의 개수
cnt = 1
q = deque()
q.append(start)
while q :
x = q.popleft()
for i in graph[x]:
if not visited[i]:
cnt += 1
visited[i] = True
q.append(i)
return cnt
def solution(n, wires):
answer = int(1e9)
graph = [ [] 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)
# 방문 표시를 통해 연결 끊기
visited[b] = True
# bfs로 연결된 노드 개수 구하기
count1 = bfs(a,graph,visited)
# 전체 개수에서 다른 트리 노드 개수 빼면 다른 트리의 노드 개수
count2 = n - count1
# 차이의 최솟값 갱신
if answer > abs(count1-count2):
answer = abs(count1-count2)
return answer
'개발 > algorithm' 카테고리의 다른 글
[프로그래머스][level3] 금과 은 운반하기 - python / 파라메트릭 서치 (0) | 2022.03.29 |
---|---|
[프로그래머스][level3] [1차] 추석 트래픽 - python (0) | 2022.03.29 |
[프로그래머스][level2] H-index - python (0) | 2022.03.25 |
[프로그래머스][level2] 행렬 테두리 회전하기 - python (0) | 2022.03.25 |
[백준 2263번] 트리의 순회 - python (0) | 2022.03.18 |