가능한 경우의 수를 모두 시도함
- 단순 Brute-Force
- 비트마스크(Bitmask)
- 재귀 함수
- 순열 (Permutation)
- BFS / DFS
당연하게도 느리지만 반드시 답을 구할 수 있으며 주어진 데이터의 크기가 작을 때 사용함
문제를 여러 부분 문제로 나눌 수 있을 때 사용하는 알고리즘들
완전탐색보다 빠르나 부분 문제의 해가(로컬 최적해 Locally Optimum Solution)가 전체 문제의 최적이라는 보장이 없으므로 일반적인 문제의 해를 구하기 힘드므로 문제가 최적 부분 구조일 때 사용함
문제를 작은 문제로 나누어 해결한 결과를 조합
각 하위문제가 중복되지 않을 때 사용
만약 중복되면 dp 쓸 것
문제가 다음 조건을 만족하면 분할 정복으로 풀 수 있음
순간의 최적인 것을 선택하는 알고리즘
그리고 현재의 선택이 앞으로 남은 선택에 어떤 영향을 끼칠지는 고려하지 않으므로 이전 선택의 번복은 없음
그래서 문제가 다음 조건을 만족하면 그리디로 풀 수 있음(그리디로 전체 최적해를 찾을 수 있음)
문제를 작은 문제로 나누어 해결한 결과를 저장하여 풀이
이 때 하위 문제들이 중복될 때 다이나믹 프로그래밍을 사용함
문제가 다음 조건을 만족하면 DP로 풀 수 있음
추후 추가할 것