from collections import defaultdict
def TreeSize(start, excep, linkInfo, n):
q = list(filter(lambda x: x != excep , linkInfo[start]))
visited = [True if i in q else False for i in range(n+1)]
visited[start] = True
cnt = len(q) + 1
while q:
nextVal = q.pop()
for i in linkInfo[nextVal]:
if not visited[i]:
q.append(i)
visited[i] = True
cnt += 1
return cnt
def solution(n, wires):
linkInfo = defaultdict(list)
for i, j in wires:
linkInfo[i].append(j)
linkInfo[j].append(i)
minimum = 100000000
for i, j in wires:
minVal = abs(TreeSize(i, j, linkInfo, n) - TreeSize(j, i, linkInfo, n))
if minVal < minimum:
minimum = minVal
return minimum
📝해결 아이디어
1. 특정 간선이 잘렸을때 서브 그래프 두개의 size를 구해야한다.
2. 각 간선을 순회하면서 해당 간선이 잘렸을 때 두 그래프의 사이즈를 구해야한다.
3. 그림에 보이는 간선이 잘렸을 경우 4에서 7로 가는건 제외하고 4에서 시작해서 그래프를 순회하며 노드 갯수를 센다. 마찬가지로 7에서 4로 가는건 제외하고 7에서 시작하여 그래프를 순회한다.
'컴퓨터 > 코테' 카테고리의 다른 글
카카오 2019 기출 - 실패율 (0) | 2021.10.04 |
---|---|
2022 블라인드 카카오 1차 2차 코딩테스트 후기 (0) | 2021.09.26 |
백준 1890 점프 - [dp] (0) | 2021.09.23 |
백준 17836 - 공주 구출 [bfs] (0) | 2021.09.16 |
삼성 기출 9660 번호 붙이기 (0) | 2021.09.13 |