본문 바로가기

Development

다익스트라 알고리즘: 기본 개념, 동작 원리 및 C# 예제 코드

안녕하세요! 오늘의 기술 면접 지식은 다익스트라 알고리즘에 관한 것입니다. 이 포스팅에서는 다익스트라 알고리즘의 기본 개념, 동작 원리, 그리고 C#으로 구현한 예제 코드를 살펴봅니다.

추천 태그: #다익스트라알고리즘 #CSharp #알고리즘 #기술면접

다익스트라 알고리즘 개요

다익스트라 알고리즘은 가중치가 있는 방향 그래프에서 특정 노드로부터 다른 모든 노드까지의 최단 경로를 찾는 알고리즘입니다. 이 알고리즘은 음의 가중치를 갖는 간선이 없을 때만 사용할 수 있습니다.

다익스트라 알고리즘 동작 원리

다익스트라 알고리즘은 시작 노드에서부터 가장 가까운 노드를 선택하고, 그 노드를 통해 이웃 노드까지의 거리를 계산합니다. 그런 다음, 이웃 노드까지의 새로운 거리가 현재 알고 있는 거리보다 작으면 이를 업데이트합니다. 이 과정을 모든 노드에 대해 반복합니다.

C#을 사용한 다익스트라 알고리즘 구현 예제

아래 예제 코드는 다익스트라 알고리즘을 C#으로 구현한 것입니다.

 

public class DijkstraAlgorithm
{
    private int VerticesCount;

    public DijkstraAlgorithm(int verticesCount)
    {
        this.VerticesCount = verticesCount;
    }

    private int MinimumDistance(int[] distance, bool[] shortestPathTreeSet)
    {
        int min = int.MaxValue;
        int minIndex = 0;

        for (int v = 0; v < VerticesCount; ++v)
        {
            if (shortestPathTreeSet[v] == false && distance[v] <= min)
            {
                min = distance[v];
                minIndex = v;
            }
        }

        return minIndex;
    }

    public void DijkstraAlgo(int[,] graph, int source)
    {
        int[] distance = new int[VerticesCount];
        bool[] shortestPathTreeSet = new bool[VerticesCount];

        for (int i = 0; i < VerticesCount; ++i)
        {
            distance[i] = int.MaxValue;
            shortestPathTreeSet[i] = false;
        }

        distance[source] = 0;

        for (int count = 0; count < VerticesCount - 1; ++count)
        {
            int u = MinimumDistance(distance, shortestPathTreeSet);
            shortestPathTreeSet[u] = true;

            for (int v = 0; v < VerticesCount; ++v)
            {
                if (!shortestPathTreeSet[v] && Convert.ToBoolean(graph[u, v]) && distance[u] != int.MaxValue && distance[u] + graph[u, v] < distance[v])
                {
                    distance[v] = distance[u] + graph[u, v];
                }
            }
        }
    }
}

 

이 코드는 각 노드에서 가장 가까운 노드를 찾아 그 노드까지의 거리를 업데이트하는 방식으로 작동합니다. 이 과정을 모든 노드가 최단 경로 집합에 포함되어 있을 때까지 반복합니다. 이 과정을 통해 시작 노드에서 그래프의 모든 다른 노드로 가는 최단 경로를 찾을 수 있습니다.

 

이렇게 다익스트라 알고리즘을 이해하고 구현해보는 과정은 기술 면접에서 알고리즘에 대한 이해도와 문제 해결 능력을 평가하는데 중요한 요소가 될 수 있습니다. 다음 포스팅에서는 다익스트라 알고리즘의 변형이나 관련된 다른 알고리즘에 대해 더 깊이 다룰 예정입니다. 그 때까지 계속 공부하시고, 항상 좋은 결과 있기를 바랍니다!