Level 3. 가장 먼 노드
그래프 탐색에서 단순 비용 갱신이 아니라, 이 문제처럼 최댓값 개수를 구하는 등 추가 작업이 필요할 때는 DFS보다는 BFS로 진행하는 것이 좋다.
이 문제는 전형적인 다익스트라 알고리즘 문제다.
- 모든 거리의 초깃값을 MAX로 설정하고, 시작점만 0으로 설정하는 것이 특징이다.
- 거리가 작으면 갱신하고 그 지점을 탐색하도록 한다.
#include <iostream>
#include <vector>
#include <queue>
#include <climits>
#define UNREACHABLE INT_MAX
using namespace std;
int solution(int n, vector<vector<int>> edge)
{
int answer = 0, max;
queue<int> que;
vector<vector<int>> graph(n + 1);
vector<int> distance(n + 1, UNREACHABLE);
for (vector<int>& e : edge)
{
graph[e[0]].emplace_back(e[1]);
graph[e[1]].emplace_back(e[0]);
}
max = distance[1] = 0;
que.emplace(1);
while (!que.empty())
{
int v = que.front(); que.pop();
if (max < distance[v])
{
max = distance[v];
answer = 1;
}
else
{
++answer;
}
for (int adj : graph[v])
{
int dist = distance[v] + 1;
if (dist < distance[adj])
{
distance[adj] = dist;
que.emplace(adj);
}
}
}
return answer;
}
'자료구조 & 알고리즘 > 프로그래머스' 카테고리의 다른 글
Level 3. 불량 사용자 (0) | 2023.08.01 |
---|---|
Level 3. 여행경로 (0) | 2023.07.31 |
Level 2. 두 원 사이의 정수 쌍 (0) | 2023.07.29 |
Level 2. 후보키 (0) | 2023.07.28 |
Level 2. 마법의 엘리베이터 (0) | 2023.07.27 |