본문 바로가기
반응형

Programming Solve/자료구조 & 알고리즘5

다익스트라 알고리즘 다익스트라 알고리즘은 그래프에서 최단 경로 문제를 해결할 수 있는 알고리즘 중 하나이다. 최단 경로 문제이므로 각 간선에는 가중치(거리)가 존재하며, 가중치가 음수인 간선이 존재한다면 다익스트라 알고리즘을 사용할 수 없다. 이해를 위해 아래의 예시를 살펴보자 1번 노드부터 모든 경로의 최단거리를 구하려고 한다. 1번 노드에서 본인의 거리는 0이므로 0으로 업데이트한 뒤 나머지 노드까지의 거리는 무한대로 설정한다. 다음으로 1번과 연결된 노드들과의 거리를 업데이트해준다. 연결된 모든 노드들의 거리를 구했으면 가장 짧은 경로로 이동한다. 따라서 위의 예시에서는 5번 노드를 방문하여 다시 거리를 계산한다. 즉, 원래의 distance[4]는 9이지만 distance[5] = 1과 5에서 4로 이동하는 거리 2.. 2022. 3. 17.
이진 탐색(Binary Search) 배열이 정렬되어 있을 때, 가운데 값과 비교하여 찾고자하는 값이 더 크면 오른쪽을 작다면 왼쪽을 탐색하는 방식 예시 [2, 5, 7, 9, 14, 19, 20, 24]가 있을 때 만약 2를 찾고 싶다면 가운데 값인 14와 비교를 하면 더 작기 때문에 다시 왼쪽 부분인 [2, 5, 7, 9]에서 같은 방식으로 반복한다. 최종적으로 2를 찾아 인덱스를 리턴하게 된다. 장점 시간복잡도가 log n으로 상당히 빠르다. 완전 탐색을 수행했을 때 시간 초과가 나는 여러 문제에서 활용될 수 있다. 구현 재귀로 구현 int recursive_binarySearch(vector arr, int start, int end, int target){ if(start > end) return -1; int mid = (star.. 2022. 3. 3.
정렬의 종류 및 구현(C++) 선택 정렬 전체 배열을 순회하며 가장 작은 원소를 앞으로 보내는 방식 #include using namespace std; int main(){ int arr[10] = { 3, 5, 1, 2, 7, 6, 9, 8, 4, 10 }; for(int i=0; i 2022. 3. 1.
투 포인터 알고리즘(Two Pointers Approach) 투 포인터 알고리즘은 2개의 인덱스(또는 반복자)를 이용하여 문제를 푸는 방법이다. 주로 배열 또는 링크드 리스트와 함께 사용하며 포인터는 시작 시, 사용하고자 하는 목적에 따라 어느 위치에 있어도 상관 없다. 예를 들어, 아래의 왼쪽 그림처럼 같은 위치에서 시작해도 괜찮고 오른쪽 그림처럼 시작점과 끝점에서 시작해도 괜찮다. 투 포인터 알고리즘의 활용 방안은 상당히 많다. 배열을 reverse하는 문제부터 정렬, 연속 수열 문제 등이 존재한다. 예제들을 풀어보고 업데이트 한다. 배열 reverse 문제 : https://appdevorsec.tistory.com/104 수열 문제 : https://appdevorsec.tistory.com/105 2022. 2. 15.
반응형