코딩테스트 가장 먼 노드 문제풀이
프로그래머스 가장 먼 노드(level 3) 문제풀이
import heapq
import sys
input = sys.stdin.readline
INF = int(1e9)
def solution(n, edge):
q = []
graph = [[] for _ in range(n+1)]
distance = [INF]*(n+1)
for i in range(len(edge)):
graph[edge[i][0]].append((edge[i][1], 1))
graph[edge[i][1]].append((edge[i][0], 1))
heapq.heappush(q, (0, 1))
distance[1] = 0
while q:
dist, now = heapq.heappop(q)
if distance[now] < dist:
continue
for i in graph[now]:
cost = dist + i[1]
if cost < distance[i[0]]:
distance[i[0]] = cost
heapq.heappush(q, (cost, i[0]))
tmp = 0
cnt = 0
for i in range(1, n+1):
tmp = max(tmp, distance[i])
for i in range(1, n+1):
if distance[i] == tmp:
cnt += 1
return cnt
전형적인 다익스트라 문제로 다익스트라 알고리즘 자체가 어려워서 레벨 3인 것 같다.
우선순위 큐를 활용해서 다익스트라 코드를 쓰는 방법에 대해 공부가 됐고,for i in graph[now]: cost = dist + i[1] if cost < distance[i[0]]: distance[i[0]] = cost heapq.heappush(q, (cost, i[0]))
최단 거리 노드들 연결시키면서 퍼져나가는 방법에 대해 확실히 이해하는 계기가 됐다
Author And Source
이 문제에 관하여(코딩테스트 가장 먼 노드 문제풀이), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kokodak/코딩테스트-가장-먼-노드-문제풀이저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)