안녕하세요! 오늘의 기술 면접 지식은 그래프 이론의 한 부분인 Dijkstra 알고리즘에 관한 것입니다. 이 포스팅에서는 Dijkstra 알고리즘의 기본 개념과 C#으로 구현한 예제 코드를 살펴봅니다.
- Dijkstra 알고리즘 개요 Dijkstra 알고리즘은 그래프에서 주어진 시작 정점으로부터 다른 모든 정점까지의 최단 경로를 찾는 알고리즘입니다. 가중치가 있는 방향 그래프에서 사용할 수 있으며, 가중치가 음수인 간선이 없는 경우에만 정확한 결과를 보장합니다.
- C#을 사용한 Dijkstra 알고리즘 구현 아래 예제 코드는 Dijkstra 알고리즘을 C#으로 구현한 것입니다.
public static Dictionary<int, int> Dijkstra(Dictionary<int, List<Tuple<int, int>>> graph, int start)
{
Dictionary<int, int> distances = new Dictionary<int, int>();
SortedSet<Tuple<int, int>> pq = new SortedSet<Tuple<int, int>>();
foreach (var vertex in graph.Keys)
{
distances[vertex] = int.MaxValue;
}
distances[start] = 0;
pq.Add(new Tuple<int, int>(0, start));
while (pq.Count > 0)
{
var current = pq.First();
pq.Remove(current);
int currentDistance = current.Item1;
int currentNode = current.Item2;
if (currentDistance > distances[currentNode])
{
continue;
}
foreach (var neighbor in graph[currentNode])
{
int newDistance = currentDistance + neighbor.Item2;
if (newDistance < distances[neighbor.Item1])
{
distances[neighbor.Item1] = newDistance;
pq.Add(new Tuple<int, int>(newDistance, neighbor.Item1));
}
}
}
return distances;
}
이 코드는 그래프를 인접 리스트(Adjacent List)로 표현하고, 시작 정점에서부터 다른 정점까지의 최단 경로를 계산합니다.
Dijkstra 알고리즘은 최단 경로를 찾는 데 사용되는 중요한 알고리즘입니다. 기술 면접에서 그래프 이론과 Dijkstra 알고리즘에 대한 질문이 나올 경우, 이러한 원리와 구현 예시를 활용하여 답변할 수 있습니다. 다음 포스팅에서 또 다른 주제로 찾아뵙겠습니다!
'Development' 카테고리의 다른 글
최장 증가 부분 수열 (LIS) 알고리즘 이해 및 C# 구현 (0) | 2023.05.01 |
---|---|
Kruskal 알고리즘을 사용한 최소 신장 트리 찾기와 C# 구현 (0) | 2023.04.28 |
그래프 이론 기초 및 너비 우선 탐색(Breadth-First Search) 알고리즘 C# 구현 (0) | 2023.04.26 |
동적 계획법(Dynamic Programming)의 기본 원리와 C# 구현 (0) | 2023.04.25 |
정렬 알고리즘 기본 개념 및 C# 구현 (0) | 2023.04.24 |