풀이 과정
이 문제는 다익스트라의 기본 문제이다.
다익스트라 알고리즘을 활용하여 dist 값을 찾아낸 뒤,
가장 큰 값을 찾아 그 값과 일치하는 개수를 세면 된다.
#include <string>
#include <vector>
#include <queue>
using namespace std;
const int INF = 1e9;
vector<int> dist;
vector<pair<int, int>> edge[20001];
priority_queue<pair<int, int>> pq;
void dijkstra(int n){
dist.resize(n + 1, INF);
dist[1] = 0;
pq.push({0, 1}); // 가중치, 정점
while(!pq.empty()){
int cost = -pq.top().first;
int now = pq.top().second;
pq.pop();
if(dist[now] < cost) continue;
for(int i = 0; i < edge[now].size(); i++){
int next = edge[now][i].first;
int nextcost = edge[now][i].second;
if(dist[next] > dist[now] + nextcost){
dist[next] = dist[now] + nextcost;
pq.push({-dist[next], next});
}
}
}
}
int solution(int n, vector<vector<int>> vertex) {
int answer = 0;
for(int i = 0; i < vertex.size(); i++){
edge[vertex[i][0]].push_back({vertex[i][1], 1}); // 도착 정점, 가중치
edge[vertex[i][1]].push_back({vertex[i][0], 1});
}
dijkstra(n);
int max = 0;
for(int i = 1; i <= n; i++){
if(max < dist[i]) max = dist[i];
}
for(int i = 1; i <= n; i++){
if(max == dist[i]) answer++;
}
return answer;
}
'🍞 Problem Solving > Programmers' 카테고리의 다른 글
[프로그래머스][Level2] 다리를 지나는 트럭 c++ (0) | 2024.02.21 |
---|---|
[프로그래머스][Level3] 네트워크 c++ (0) | 2022.10.21 |
[프로그래머스][Level2] 행렬의 곱셈 c++ (0) | 2022.10.21 |
[프로그래머스][Level2] 피로도 c++ (0) | 2022.10.21 |
[프로그래머스][Level2] 줄 서는 방법 c++ (0) | 2022.10.21 |