[Python] 프로그래머스 lv3 - 가장 먼 노드
2024. 2. 8. 19:55ㆍ알고리즘/문제풀이
[Python] 프로그래머스 lv3 - 가장 먼 노드
코딩테스트 연습 - 가장 먼 노드 | 프로그래머스 스쿨 (programmers.co.kr)
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명



- vertex로 연결된 정점들이 주어진다.
- 연결된 정점끼리의 간선은 모두 1이다.
- 1번 정점을 기준으로 하여 해당 정점에서 멀리 떨어진 정점의 개수를 반환하는 것이다
- 떨어진 거리를 dist로 하여 배열에 저장을 한다
- 이때 거리의 최댓값과 동일한 노드의 갯수를 반환하는 방식을 선택했다
- 거리를 측정하는 방법은 다익스트라 알고리즘을 사용
- 각 정점끼리의 거리를 최대값 1e9로 초기값을 세팅
- heapq를 사용하여 우선순위 큐를 사용
- 효율적인 최단 거리를 가진 노드를 선택하기 위해서 사용한다.
- 우선순위 큐는 각 요소를 우선순위에 따라 정렬된 상태로 저장을 하여 효율적으로 최소 값을 추출하는 데 사용된다
풀이 코드
import heapq
def solution(n, edge):
maps = [[] for _ in range(n+1)]
for i,j in edge:
# 양방향 그래프
maps[i].append((j,1))
maps[j].append((i,1))
dist = [1e9]*(n+1)
q = []
heapq.heappush(q, (0,1))
dist[1] = 0
while q:
distance, now = heapq.heappop(q)
if dist[now] <distance:
continue
for i in maps[now]:
cost = distance + i[1]
if cost < dist[i[0]]:
dist[i[0]] = cost
heapq.heappush(q,(cost,i[0]))
for i in range(len(dist)):
if dist[i] == 1e9:
dist[i] = 0
return dist.count(max(dist))
'알고리즘 > 문제풀이' 카테고리의 다른 글
[Python] Programmers lv2 - 더 맵게 (0) | 2024.02.11 |
---|---|
[Python] 프로그래머스 lv2 - 뉴스 클러스터링 (0) | 2024.02.01 |
[Python] 프로그래머스 lv2 (2019 카카오 개발자 겨울 인턴쉽) - 튜플 (0) | 2024.01.31 |
[Python] 프로그래머스 lv2 - 타겟 넘버 (1) | 2024.01.03 |
[Python] 프로그래머스 lv2 - 소수 찾기 (1) | 2024.01.03 |