PROGRAMMERS 프로그래머스 : 가장 먼 노드
Updated:
시작하면서
이번 문제는 BFS(Breadth First Search) 문제이다.
문제 아이디어
노드의 개수는 최대 20,000개, 간선의 개수는 50,000개이다. 1번 노드와 다른 노드들의 최단 거리들을 찾아야하므로 DFS를 사용하면 스택 오버플로우가 발생할만한 크기이므로, BFS로 문제를 해결했다.
해결
#include <string>
#include <vector>
#include <queue>
#include <limits.h>
using namespace std;
int solution(int n, vector<vector<int>> edge)
{
vector<vector<int>> edges(n + 1);
for (int i = 0; i < edge.size(); i++)
{
edges[edge[i][0]].push_back(edge[i][1]);
edges[edge[i][1]].push_back(edge[i][0]);
}
vector<int> minimumEdgeCount(n + 1, INT_MAX);
queue<pair<int, int>> q;
q.push({ 1, 0 });
while (!q.empty())
{
int currentNode = q.front().first;
int currentEdgeCount = q.front().second;
q.pop();
if (minimumEdgeCount[currentNode] <= currentEdgeCount)
continue;
minimumEdgeCount[currentNode] = currentEdgeCount;
for (int i = 0; i < edges[currentNode].size(); i++)
{
if (minimumEdgeCount[edges[currentNode][i]] <= currentEdgeCount + 1)
continue;
q.push({ edges[currentNode][i], currentEdgeCount + 1 });
}
}
int max = 0, answer = 0;
for (int i = 1; i <= n; i++)
{
if (minimumEdgeCount[i] > max)
{
max = minimumEdgeCount[i];
answer = 1;
}
else if (minimumEdgeCount[i] == max)
{
answer++;
}
}
return answer;
}
Leave a comment