|
์ฝ๋ ์์ฑํ๊ธฐ
#include<string>
#include<vector>
#include<queue>
#include<iostream>
#include<algorithm>
using namespace std;
vector<vector<int>>v;
queue<int>q;
int maxi, answer;
int dist[20005];
void bfs() { //bfs ์์
while (!q.empty()) { //q๊ฐ ๋น ๋ ๊น์ง
int now = q.front();
q.pop();
for (int i = 0; i < v[now].size(); i++) {//now์์ ์ฐ๊ฒฐ๋ ๋
ธ๋๋ค ๋ฐฉ๋ฌธํ๊ธฐ
int next = v[now][i];
if (!dist[next]) { //next๊ฐ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ ์๋์ด ์๋ค๋ฉด
dist[next] = dist[now] + 1; //now๋ณด๋ค 1์นธ ๋ฉ๋ฆฌ ์์ผ๋ฏ๋ก dist[now] + 1
q.push(next);
maxi = max(maxi, dist[next]); //๋ฐฉ๋ฌธ์ฒ๋ฆฌ ํ๋ฉด์ 1๋ฒ ๋
ธ๋๋ก๋ถํฐ ์ ์ผ ๋ฉ๋ฆฌ์๋๊ฐ ๊ณ์ ๊ฐฑ์
}
}
}
}
int solution(int n, vector<vector<int>> edge) {
v.resize(n + 1);
for (int i = 0; i < edge.size(); i++) { //๊ฐ์ ์ ์ ๋ณด๋ฅผ ์ฌ์ฉํ์ฌ ๋ฆฌ์คํธ๋ฅผ ์ด์ฉํ ๊ทธ๋ํ ๋ง๋ค๊ธฐ
for (int j = 0; j < 2; j++) {
int a = edge[i][0], b = edge[i][1];
v[a].push_back(b); //์๋ฐฉํฅ ๊ทธ๋ํ์ด๊ธฐ ๋๋ฌธ์ ์์ชฝ ์ฐ๊ฒฐ
v[b].push_back(a);
}
}
dist[1] = 1; //์์์ ์ด 1๋ฒ์ด๊ธฐ์ ๋ฐฉ๋ฌธ์ฒดํฌ ๋ฐ queue์ ์ถ๊ฐ
q.push(1);
bfs();
for (int i = 1; i <= n; i++) if (dist[i] == maxi) answer++; //์ต๋๊ฑฐ๋ฆฌ์ ์๋ ๋
ธ๋ ๊ฐ์ ์ฐพ๊ธฐ
return answer;
}
C++
๋ณต์ฌ
|
์ฝ๋ ์ค๋ช
ํ๊ธฐ
๊ทธ๋ํ ํ์ ๋ฌธ์ ๋ก BFS๋ฅผ ์ฌ์ฉํ์ฌ ํด๊ฒฐ
: DFS์ BFS์ ๋ํ ์ ๋ฆฌ
์ฃผ์ด์ง edge์ ์ ๋ณด๋ก ๋ฆฌ์คํธ๋ฅผ ์ด์ฉํ์ฌ ๊ทธ๋ํ๋ฅผ ๋ง๋ค์ด์ฃผ๊ณ , ์์ ๋
ธ๋์ธ 1๋ฒ ๋
ธ๋๋ถํฐ ํ์ ์์
dist๋ฐฐ์ด: ๋ฐฉ๋ฌธ ์ฌ๋ถ ํ์ธ + 1๋ถํฐ ๋จ์ด์ง ๊ฑฐ๋ฆฌ๋ฅผ ๊ธฐ๋ก
โข
๋ฌธ์ ์์ ์ฃผ์ด์ง ์์
โข
1๋ฒ ๋
ธ๋๋ก๋ถํฐ ์ฐ๊ฒฐ๋ ๋
ธ๋๋ 2, 3๋ฒ์ด๊ธฐ์ dist[2]์ dist[3]์ ๊ฐ์ 1๋ฒ๊น์ง์ ๊ฑฐ๋ฆฌ +1 ์ด๋ฏ๋ก
dist[2]= dist[3] = dist[1]+1(=2) โ ์ด ๋ 1๋ฒ ๋
ธ๋๋ก๋ถํฐ ๊ฐ์ฅ ๋จผ ๊ฑฐ๋ฆฌ์ธ ๊ฐ maxi = dist[2] = dist[3] โ 2
โข
2๋ฒ ๋
ธ๋์ ์ฐ๊ฒฐ๋ 4, 5๋ฒ ๋
ธ๋๋ ์์์ ์ผ๋ก๋ถํฐ ๊ฑฐ๋ฆฌ๊ฐ dist[2] + 1 โ maxi = dist[4] = dist[5] โ 3
โข
3๋ฒ ๋
ธ๋์ ์ฐ๊ฒฐ๋ 6๋ฒ ๋
ธ๋๋ ์์์ ์ผ๋ก๋ถํฐ ๊ฑฐ๋ฆฌ๊ฐ dist[3] + 1 โ maxi๊ฐ ๋ณ๋ X
โข
๊ทธ๋ํ ํ์ ํ dist๋ฐฐ์ด์ 1๋ฒ ~ n๋ฒ ์ธ๋ฑ์ค๊น์ง ๊ฑฐ๋ฆฌ ์ค ์ต๋๊ฐ๊ณผ ๊ฐ์ ๊ฐ์ ๊ณจ๋ผ return