🚀 [가장 먼 노드] Lv. 3 문제
먼저 그래프의 문제 임으로 그래프를 이루는 2차원 벡터를 선언하고 edge를 계산하여 그래프를 구현합니다.
1 번 노드에서의 거리를 저장하는 distance 벡터를 생성합니다.
bfs 너비 우선 탐색을 이용하여 그래프를 순회합니다.
max_element를 이용해 최대로 먼 노드의 거리를 구하고 이와 일치하면 count하여 문제를 해결합니다.
💎 전체 코드는 다음과 같습니다.
#include <string>
#include <vector>
#include <queue>
#include <iostream>
#include <algorithm>
using namespace std;
// 방문 순서.
void bfs(vector<vector<int> > adj, vector<int>& distance, int start){
distance = vector<int>(adj.size(),-1);
queue<int> q;
distance[start] = 0;
q.push(start);
while(!q.empty()){
int here = q.front();
q.pop();
for(int i=0; i<adj[here].size(); i++){
int there = adj[here][i];
if(distance[there] == -1){
q.push(there);
distance[there] = distance[here] + 1;
}
}
}
}
int solution(int n, vector<vector<int>> edge) {
int answer = 0;
vector<vector<int>> graph(n+1);
for(int i=0; i<edge.size(); i++)
{
int from = edge[i][0];
int to = edge[i][1];
graph[from].push_back(to);
graph[to].push_back(from);
}
vector<int> distance;
bfs(graph,distance,1);
int MAXX = *max_element(distance.begin(), distance.end());
for(int i=1; i<distance.size(); i++){
if(distance[i] == MAXX){
answer++;
};
}
return answer;
}
Comments