728x90
반응형
https://school.programmers.co.kr/learn/courses/30/lessons/49189
문제 설명
n개의 노드가 있는 그래프가 있습니다. 각 노드는 1부터 n까지 번호가 적혀있습니다. 1번 노드에서 가장 멀리 떨어진 노드의 갯수를 구하려고 합니다. 가장 멀리 떨어진 노드란 최단경로로 이동했을 때 간선의 개수가 가장 많은 노드들을 의미합니다.
노드의 개수 n, 간선에 대한 정보가 담긴 2차원 배열 vertex가 매개변수로 주어질 때, 1번 노드로부터 가장 멀리 떨어진 노드가 몇 개인지를 return 하도록 solution 함수를 작성해주세요.
풀이
Code
from heapq import heappush, heappop
def solution(n, vertex):
# 1. 다익스트라 함수 정의
def dijkstra(start) :
# 1-1. 힙 생성 후 (거리, 출발 노드) 삽입
heap = []
heappush(heap, (0, start))
# 1-2. 거리 정보 업데이트
distance[start] = 0
# 1-3.
while heap :
# 1-3-1. 힙에서 정보 추출
d, node = heappop(heap)
# 1-3-2. 이미 처리된 경우 continue
if d > distance[node] : continue
# 1-3-3.
for next, c in graph[node] :
# 거리 계산
cost = d + c
# 다음 노드에 도달하는 거리보다 짫을 경우
if distance[next] > cost :
# 거리 정보 업데이트
distance[next] = cost
# 힙에 정보 삽입
heappush(heap, (cost, next))
# 2. 그래프 생성 후 간선 정보 입력
graph = [[] for _ in range(n+1)]
for a, b in vertex :
graph[a].append((b, 1))
graph[b].append((a, 1))
# 3. 거리 정보 리스트 생성
distance = [float('inf') for _ in range(n+1)]
# 4. 다익스트라 실행
dijkstra(1)
# 5. 결과 리턴
return distance[1:].count(max(distance[1:]))
728x90
반응형
'Coding Test > Programmers' 카테고리의 다른 글
[Python/Programmers] 불량 사용자 (1) | 2023.12.06 |
---|---|
[Python/Programmers] 스티커 모으기(2) (0) | 2023.12.05 |
[Python/Programmers] 기지국 설치 (1) | 2023.12.03 |
[Python/Programmers] 단속카메라 (0) | 2023.12.03 |
[Python/Programmers] 베스트앨범 (0) | 2023.12.03 |