최단 경로를 구하는 것인데 , 단순히 노드의 연결되어 있는
노드로 접근하는 것이다.
-> bfs로 접근하자 .
원소의 갯수를 얻어야 하므로 lower_bound를 사용하자.
#include <string>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
int solution(int n, vector<vector<int>> edge) {
int answer = 0;
vector<int>v[n + 1];
for(auto i : edge)
{
v[i[0]].emplace_back(i[1]);
v[i[1]].emplace_back(i[0]);
}
vector<int>dist(n + 1, 0);
vector<bool>check(n + 1, false);
queue<int>q;
q.push(1);
while(!q.empty())
{
int node = q.front();
q.pop();
if(check[node] == true)
continue;
check[node] = true;
for(int i = 0; i < v[node].size(); i++)
{
int nextNode = v[node][i];
if(check[nextNode] == true)
continue;
q.push(nextNode);
if(dist[nextNode] == 0)
dist[nextNode] = dist[node] + 1;
}
}
sort(dist.begin(), dist.end());
int max = dist.back();
auto iter = lower_bound(dist.begin(), dist.end(), max);
answer = dist.end() - iter;
return answer;
}
#include <string>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
int solution(int n, vector<vector<int>> edge) {
int answer = 0;
vector<vector<int>>v(n + 1);
for(auto iter : edge)
{
int first = iter[0];
int second = iter[1];
v[first].push_back(second);
v[second].push_back(first);
}
vector<int>dist(n + 1);
vector<bool>check(n + 1, false);
queue<int>q;
q.push(1);
dist[1] = 0;
while(!q.empty())
{
int num = q.front();
int curDist = dist[num];
q.pop();
if(check[num] == true)
continue;
check[num] = true;
for(int i = 0; i < v[num].size(); i++)
{
int nextNum = v[num][i];
if(check[nextNum])
continue;
//1-2 1-3 2-3 연결관계 고려해서 예외처리함.
if(dist[nextNum])
continue;
dist[nextNum] = curDist + 1;
q.push(nextNum);
}
}
int MAX = *max_element(dist.begin(), dist.end());
for(int i = 0; i < dist.size(); i++)
{
if(MAX == dist[i])
answer += 1;
}
return answer;
}