[Programmers] Lv3. ๊ฐ์ฅ ๋จผ ๋
ธ๋ | C++
2023. 10. 22. 14:46ใCoding Test/Programmers
๐๋ฌธ์ ๋ณด๋ฌ๊ฐ๊ธฐ
๐ง๐ป ํ์ด ๊ณผ์
์ฒ์์ ๋ค์ต์คํธ๋ผ(Dijkstra) ์๊ณ ๋ฆฌ์ฆ์ ๋จผ์ ๋ ์ฌ๋ ธ๋๋ฐ, BFS๋ก๋ ๊ฐ๋จํ๊ฒ ํ ์ ์๊ฒ ๋จ ์๊ฐ์ด ๋ค์ด BFS๋ก ํ์์ต๋๋ค. ์๊ณ ๋ฆฌ์ฆ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ํ ๋ฒํธ๋ ๋ ธ๋์ ๋ฒํธ, ์ด ๋ฒํธ๋ ํ ๋ฒํธ ๋ ธ๋์ ์ฐ๊ฒฐ๋ ๋ค๋ฅธ ๋ ธ๋๋ค์ ๋ฒํธ๋ก ์ด๋ฃจ์ด์ง 2์ฐจ์ ๋ฐฐ์ด์ ์ ์ธํ๋ค.
- 1๋ฒ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ ํ Queue์ ๋ฃ๊ณ , BFS ํ์์ ์์ํ๋ค.
- Queue์์ ๋ ธ๋(source)๋ฅผ ๊บผ๋ธ ํ, ํด๋น ๋ ธ๋์ ์ฐ๊ฒฐ๋ ๋ค๋ฅธ ๋ ธ๋๋ค์ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ ํ Queue์ ๋ฃ๋๋ค.
- ์ด ๋, source ๋ ธ๋์ ์ฐ๊ฒฐ๋ ๋ค๋ฅธ ๋ ธ๋๋ค์ ๊ฑฐ๋ฆฌ๊ฐ์ source ๋ ธ๋ ๊ฑฐ๋ฆฌ๊ฐ + 1๋ก ๊ฐฑ์ ํ๋ค.
- ๊ฐฑ์ ๋ ๊ฑฐ๋ฆฌ๊ฐ์ ๋ณ๋์ ๋ฐฐ์ด์ ๋ด๋๋ค.
- ์ ๊ณผ์ ์ Queue๊ฐ ๋น ๋๊น์ง ๋ฐ๋ณตํ๋ค.
- ๊ฑฐ๋ฆฌ๊ฐ์ด ์ ์ฅ๋ ๋ฐฐ์ด์ ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ ํ, ์ฒซ ๋ฒ์งธ ๊ฐ์ ๊ฐ์๋ฅผ ์ธ์ด ๋ฆฌํดํ๋ค.
โ๏ธ์์ค ์ฝ๋ ๋ฐ ๊ฒฐ๊ณผ
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
struct Node
{
vector<int> otherNodes;
int _distance = 0;
};
int BFS(vector<Node>& nodes, const int n, int v)
{
vector<bool> visited(n + 1, false);
queue<int> next;
next.push(v);
visited[v] = true;
vector<int> candidates;
candidates.reserve(n);
while (!next.empty())
{
v = next.front();
next.pop();
for (const auto& otherNode : nodes[v].otherNodes)
{
if (visited[otherNode])
continue;
visited[otherNode] = true;
int nextDistance = nodes[v]._distance + 1;
nodes[otherNode]._distance = nextDistance;
candidates.push_back(nextDistance);
next.push(otherNode);
}
}
sort(candidates.begin(), candidates.end(), greater<int>());
return std::count(candidates.begin(), candidates.end(), candidates[0]);
}
int solution(int n, vector<vector<int>> edge) {
// 1. ๋
ธ๋ ๋ณ๋ก ๊ฐ์ ์ ๋ณด ์ ๋ฆฌํ๊ธฐ
vector<Node> nodes(n + 1);
for (const auto& e : edge)
{
int start = e[0], dest = e[1];
nodes[start].otherNodes.emplace_back(dest);
nodes[dest].otherNodes.emplace_back(start);
}
// 2. BFS
int answer = BFS(nodes, n, 1);
return answer;
}
728x90
๋ฐ์ํ
'Coding Test > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Programmers] Lv3. [1์ฐจ] ์ ํ๋ฒ์ค | C++ (0) | 2023.11.18 |
---|---|
[Programmers] Lv3. ์ฌ ์ฐ๊ฒฐํ๊ธฐ | C++ (1) | 2023.10.22 |
[Programmers] Lv3. [์นด์นด์ค ์ธํด] ๋ณด์ ์ผํ | C++ (0) | 2023.10.22 |
[Programmers] Lv3. ์ด์ค์ฐ์ ์์ํ | C++ (0) | 2023.09.10 |
[Programmers] Lv2. ๋จ์ฒด์ฌ์ง ์ฐ๊ธฐ | C++ (0) | 2023.08.12 |