카테고리 없음
프로그래머스_level2_전력망 둘로 나누기(python)
코친남
2023. 9. 5. 16:49
5일 만에 풀었다.
원래 30분~1시간 정도 고민해보고 안 떠오르면 구글링을 하는 편인데
level2에 높은 정답률에 문제에서 무슨 알고리즘인까지 알려줘서 구글링을 하기에는 존심이 살짝 상해.. 할 것 없을 때 5분 씩 고민해봤다.
# 접근
크지 않은 n의크기 wires의 길이는 n -1이라고 문제에서 주어졌으니 bfs를하면 시간내에 풀 수 있다.
# 풀이
1. wires를 차례대로 하나씩 받아서 graph를 만든다.
2. 연결돼 있는 전력망을 끊었을 때 둘의 차이를 어떻게 구할까 => 끊고자 하는 전력망을 타고가서 몇 개가 연결돼 있는지 확인한다.
3. 구한 개수를 이제 나머지 부분에서의 개수와 빼주면 된다. 끝~~~ 쉽죠잉 (이걸 왜 처음에는 생각을 못했지...)
# 코드
from collections import deque
def check(start, end, visited, graph):
visited[start] = 1
visited[end] = 1
q = deque()
q.append(end)
cnt = 1
while q:
cur = q.popleft()
for next in graph[cur]:
if not visited[next]:
visited[next] = 1
cnt += 1
q.append(next)
return cnt
def solution(n, wires):
answer = -1
graph = [[] for _ in range(n+1)]
for s, e in wires:
graph[s].append(e)
graph[e].append(s)
answer = float("inf")
for s,e in wires:
visited = [0] * (n+1)
res = check(s, e, visited, graph)
alpha = abs(n - res)
res = abs(res - alpha)
answer = min(answer, res)
return answer
# 회고
공부 많이 했다. 다 알고 있는 부분일 것이다. 조금만 침착해보자