dryflowery

최소 신장 트리(MST: Minimum Spanning Tree)

최소 신장 트리 신장 트리란 그래프 $G$의 부분 그래프 중 트리의 조건을 만족하는 것이다. 다시 말해서, 그래프 $G$의 모든 정점을 하나 이상의 간선을 사용해 트리 형태로 연결한 것이다. 최소 신장 트리란 무방향 가중치 그래프의 신장 트리 중 간선의 가중치의 합이 최소인 신장 트리이다. 최소 신장 트리를 구현하는 알고리즘에는 크루스칼 알고리즘과...

분리 집합(Disjoint Set)

분리 집합 분리 집합은 공통 원소가 없는 집합(서로소 집합)들에 대한 정보를 저장하고 조작하는 자료 구조이다. 두 원소가 같은 집합에 속해있는지 확인하거나, 최소 신장 트리를 구현하는 등 여러 상황에서 사용할 수 있다. 분리 집합은 유니온 파인드라고도 하는데, 분리 집합이 Union과 Find 두 가지 연산을 지원하기 때문이다. 연산 Union...

투 포인터(Two Pointer)

투 포인터 알고리즘 투 포인터 알고리즘은 배열에서 각 원소를 가리키는 두 개의 포인터를 조작하여 $O(N)$에 문제를 해결하는 알고리즘이다. 일반적으로 투 포인터는 두 가지 종류가 있다. 두 포인터가 양 끝에서 시작하는 경우와 한 점(일반적으로 시작점)에서 시작하는 경우다. 한 점에서 시작하는 경우 2003번: 수들의 합2는 배열에서 연속된 원...

플로이드-워셜(Floyd-Warshall)

플로이드-워셜 알고리즘 앞선 다익스트라와 벨만-포드 알고리즘은 한 정점에서 다른 모든 정점까지의 최단 경로를 구하는 알고리즘이었다. 그렇다면 모든 정점에 대하여 다른 모든 정점까지의 최단 경로를 구하려면 어떻게 해야할까? 음수 간선의 존재 여부에 따라 모든 정점에 대해서 다익스트라 혹은 벨만-포드 알고리즘을 사용할 수도 있겠지만, 플로이드 워셜 알고...

벨만-포드(Bellman-Ford)

벨만-포드 알고리즘 벨만-포드 알고리즘은 다익스트라 알고리즘과 마찬가지로 한 정점에서 다른 모든 정점까지의 최단 거리를 구하는 알고리즘이다. 다익스트라 알고리즘은 음수 간선이 포함된 경우 제대로 동작하지 않지만, 벨만-포드 알고리즘은 음수 간선이 포함된 경우에도 정확한 최단 거리를 구할 수 있고, 음수 사이클의 존재 여부까지 판별할 수 있다. ...

다익스트라(Dijkstra)

다익스트라 알고리즘 다익스트라 알고리즘은 한 정점에서 다른 모든 정점까지의 최단 경로를 구하는 알고리즘이다. 그래프 뿐만 아니라 그래프로 변환할 수 있는(2차원 배열 등) 자료구조에서 전부 사용할 수 있다. 최단 경로라고 표현했지만, 문제에 따라 최소 가중치, 최소 비용등으로도 표현 가능하다. 진행 방식 방문하지 않은(거리가 확...

그리디(Greedy)

그리디 그리디 알고리즘은 현재 상황에서 가장 좋은(최적의) 선택을 하는 알고리즘 기법이다. 부분 문제들의 최적해의 집합이 전체 문제의 최적해와 일치할 때만 사용할 수 있다. 부분 문제들의 최적해의 집합이 전체 문제의 최적해와 일치 노드에 적힌 숫자의 합을 최대로 해서 S에서 E까지 가는 문제가 있다고 해보자. 위 그래프에서는 2개의 부분 문제...

매개 변수 탐색(Parametric Search)

최적화 문제를 결정 문제로 변환 파라메트릭 서치는 “최적화 문제”를 “결정 문제”로 바꾸고, 이분 탐색을 이용해서 푸는 알고리즘이다. 종만북의 “최적화 문제 결정 문제로 바꿔 풀기” 파트에서 파라메트릭 서치를 설명하면서 딱히 이름이 붙어 있지 않다고 하는 걸 보니 꽤 최근에 네이밍이 된 듯 하다. 최적화 문제와 결정 문제의 정의는 다음과 같다. ...

백준 24896번: 르블랑의 트리 순회

문제 24896번: 르블랑의 트리 순회 아이디어 순회가 불가능한 조건 1번 노드를 루트 노드로 트리를 순회한다고 가정했을 때, 한 번에 체크포인트가 3개 이상 필요하면 순회가 불가능하다. 위와 같은 트리는 순회가 가능하지만 위와 같은 트리는 순회가 불가능하다. 1번 노드의 오른쪽 서브 트리를 탐색한 후 왼쪽 서브 트리를 탐색하기 위해서...