문제 설명
문제 설명 n개의 송전탑이 전선을 통해 하나의 트리 형태로 연결되어 있습니다. 당신은 이 전선들 중 하나를 끊어서 현재의 전력망 네트워크를 2개로 분할하려고 합니다. 이때, 두 전력망이 갖게 되는 송전탑의 개수를 최대한 비슷하게 맞추고자 합니다. 송전탑의 개수 n, 그리고 전선 정보 wires가 매개변수로 주어집니다. 전선들 중 하나를 끊어서 송전탑 개수가 가능한 비슷하도록 두 전력망으로 나누었을 때, 두 전력망이 가지고 있는 송전탑 개수의 차이(절대값)를 return 하도록 solution 함수를 완성해주세요.
풀이
>> BFS
from collections import deque
def make_graph(wires, n):
cnt = 0
graph = []
for i in range(n + 1):
node = []
graph.append(node)
for i in range(len(wires)):
graph[wires[i][0]].append(wires[i][1])
graph[wires[i][1]].append(wires[i][0])
return graph
def bfs(graph, start, visited):
queue = deque([start])
visited[start] = True
list = []
while queue:
v = queue.popleft()
list.append(v)
for i in graph[v]:
if not visited[i]:
queue.append(i)
visited[i] = True
return list
def solution(n, wires):
answer = 100
wires = sorted(wires, key = lambda x : (x[0], x[1]))
for i in range(len(wires)):
wire = wires[:i]+wires[i+1:]
graph = make_graph(wire, n)
node = []
node = set(node)
for j in range(1, n + 1):
visited = [False] * (n + 1)
bfs(graph, j, visited)
node.add(visited.count(True))
if max(node) - min(node) < answer:
answer = max(node) - min(node)
return answer
>>DFS
def dfs(v, graph, visited):
visited[v] = True
return sum([1] + [dfs(u, graph, visited) for u in graph[v] if not visited[u]])
def solution(n, wires):
graph = [[] for _ in range(n+1)]
for v, u in wires:
graph[v].append(u)
graph[u].append(v)
answer = 100
for i in range(n-1):
visited = [False for _ in range(n+1)]
v1, v2 = wires[i]
visited[v2] = True
tmp = abs(dfs(v1, graph, visited) - dfs(v2, graph, visited))
answer = min(tmp, answer)
return answer
만약 첫 번째 [1,3]이 끊어진다면, 1과 3에서 시작한 노드 경로는 독립일 것이다.
그래서 1에서 시작을 할 때, 3은 방문하지 않을 것이므로 미리 visitied[v2] = True 를 선언한다.
출처
https://school.programmers.co.kr/learn/courses/30/lessons/86971
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
728x90
'Programing > 프로그래머스 오답노트' 카테고리의 다른 글
[프로그래머스] 큰 수 만들기 (0) | 2023.10.09 |
---|---|
[프로그래머스] 삼각 달팽이 (1) | 2023.10.09 |
[프로그래머스] 가장 큰 수 (0) | 2023.10.08 |
[프로그래머스] 택배 상자 (stack, que) (0) | 2023.10.08 |
[프로그래머스] 2xn 타일링 (0) | 2023.10.08 |
댓글