투 포인터(Two Pointer) 알고리즘 투포인터 알고리즘은 이름에서도 알 수 있듯이, 두 개의 포인터를 이용해 배열이나 리스트 등의 자료구조에서 원하는 값을 찾아내는 방법입니다. 주로 정렬된 배열에서 두 수의 합, 연속된 부분 배열의 합 등을 효율적으로 찾을 때 사용됩니다. 아래는 투포인터 알고리즘의 기본 개념을 사용하여, 정렬된 배열에서 두 수의 합이 특정 값인 타겟을 만족하는 첫 번째 쌍을 찾는 자바스크립트 함수입니다. function twoPointers(arr, target) { let left = 0; let right = arr.length - 1; while (left < right) { const sum = arr[left] + arr[right]; if (sum === target) ..
BFS(Breadth-First Search) 그래프 탐색 알고리즘 중 하나로, 너비 우선 탐색이라고도 합니다. 이 알고리즘은 그래프를 너비 방향으로 탐색하여 시작 노드에서부터 레벨별로 탐색을 진행합니다. BFS는 시작 노드에서부터 가까운 이웃 노드부터 순차적으로 방문하며, 레벨별로 탐색하면서 최단 경로를 찾는 데 유용합니다. BFS의 동작 방식은 다음과 같습니다: 시작 노드를 방문하고, 방문한 노드를 큐(Queue)에 추가합니다. 큐에서 노드를 하나씩 꺼내어 방문하고, 해당 노드의 모든 이웃 노드를 큐에 추가합니다. 큐가 빌 때까지 위 과정을 반복합니다. BFS는 레벨 단위로 탐색하기 때문에, 같은 레벨에 있는 노드들을 모두 탐색한 후에 다음 레벨로 넘어갑니다. 이로 인해 시작 노드로부터의 최단 경로를..
다익스트라 알고리즘 네트워크에서 최단 경로를 찾는 알고리즘이며, 이 알고리즘은 엣지 가중치의 합이 최소가 되는 경로를 찾아줍니다. 즉, 그래프의 한 정점에서 다른 정점으로 가는 가장 짧은 경로를 찾는 문제를 해결하는데 사용됩니다. 1. 초기화: 시작 노드의 거리를 0으로, 나머지 모든 노드의 거리를 무한대로 설정합니다. 시작 노드를 현재 노드로 설정합니다. 2. 현재 노드에서 인접한 노드들의 거리를 계산합니다. 이 때, 기존에 설정한 거리보다 새로 계산한 거리가 짧으면 거리 정보를 업데이트합니다. 3. 모든 인접 노드에 대해 거리를 업데이트한 후에는 방문하지 않은 노드 중 거리가 가장 짧은 노드를 새로운 '현재 노드'로 설정합니다. 4. 모든 노드를 방문할 때까지 이 과정을 반복합니다. 다음과 같은 그래..
DFS(Depth-First Search) 그래프 탐색을 위한 알고리즘 중 하나로, 깊이 우선 탐색이라고도 합니다. DFS는 그래프의 모든 노드를 방문하고, 각 노드를 한 번씩만 방문하며 연결된 모든 노드를 탐색합니다. DFS의 작동 방식은 다음과 같습니다: 시작 노드를 방문하고, 방문한 노드를 "방문한 노드" 목록에 추가합니다. 현재 노드와 연결된 이웃 노드들을 확인합니다. 이웃 노드들 중 방문하지 않은 노드가 있으면, 그 이웃 노드로 이동하여 재귀적으로 탐색합니다. 모든 이웃 노드를 방문했거나 더 이상 방문할 이웃 노드가 없으면, 이전 단계로 돌아가서 탐색을 계속합니다. DFS는 스택(Stack) 또는 재귀 함수를 사용하여 구현할 수 있습니다. 스택을 사용하는 경우, 방문한 노드들을 스택에 차례로 쌓..