반응형
lv. 3 단계의 코딩 테스트 연습 문제 중 '가장 먼 노드'에 대한 풀이를 설명하고 있습니다.
프로그래머스 - 가장 먼 노드
코딩 테스트 연습 문제 풀이
위의 목차를 클릭하면 해당 글로 자동 이동 합니다.
원리
- 이 문제는 우선 순위 큐를 가지고 BFS를 돌리면 정말 금방 끝난다.
- 다익스트라와 같이 이전에 탐색된 노드들의 거리를 갱신해줄 필요가 없는 이유는 간선의 거리가 모두 1로 통일이기 때문에 노드를 많이 거쳐가면 무조건 오래 걸린다.
- 예를 들어, 다익스트라에서는 1->2로 이동하는데는 5가 걸리는데, 1->3->2로 가면 3이 걸릴 수 있다.
- 따라서 특정 점에서 특정 점까지의 거리를 계속해서 갱신해야 한다.
- 하지만, 현재 상황에서는 1->2가 1->3->2보다 무조건 빠르다는 것을 알고 있다.
- 따라서, 우선 순위 큐를 가지고 1에서 가까운 점들부터 탐색하는 식으로 다음 노드를 꺼낸다면 쉽게 끝나는 것이다.
- 결론적으로, 방문한 노드는 다시 방문할 필요가 없고, BFS와 같이 해당 점에 먼저 도착한 경로가 곧 최단 경로라는 것을 명심하면 된다.
- 코드는 아래와 같다.
코드
import heapq
from collections import deque, defaultdict
def solution(n, edge):
answer = 0
graph = defaultdict(list)
for (x, y) in edge:
graph[x].append(y)
graph[y].append(x)
q = []
distance = [20001 for _ in range(n + 1)]
heapq.heappush(q, [0, 1])
while q:
dist, node = heapq.heappop(q)
if distance[node] != 20001:
continue
distance[node] = dist
for i in graph[node]:
heapq.heappush(q, [dist+1, i])
maxDist = max(distance[1:])
answer = distance.count(maxDist)
return answer
백준 골드 3이 코앞이다. 조금만 더 열심히 하면 될 것 같다. 이번주 현대퓨처넷 코테도 아자아자 화이팅!
추천글
https://school.programmers.co.kr/learn/courses/30/lessons/49189
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
반응형
'알고리즘' 카테고리의 다른 글
백준 - 테트로미노 14500, 문자열 폭발 9935 (0) | 2025.01.28 |
---|---|
백준 - 내리막길 1520, 겹치는 선분 1689 (0) | 2025.01.26 |
프로그래머스 - 아이템 줍기 (0) | 2025.01.01 |
프로그래머스 - 전력망을 둘로 나누기 (0) | 2024.12.25 |
프로그래머스 - 피로도 (0) | 2024.12.25 |