완전 탐색(Full Search 또는 Brute Force)은 주어진 문제의 모든 가능한 해를 하나씩 탐색하여 정답을 찾는 방법입니다. 가능한 모든 경우의 수를 탐색하여 해를 찾는 것이므로, 정확한 답을 구할 수 있지만 시간 복잡도가 크거나 계산이 많이 필요한 경우에는 비효율적일 수 있습니다. 완전 탐색은 문제의 크기가 작거나, 최적해를 찾는 경우에 유용하게 사용됩니다.

완전 탐색의 주요 특징:

  1. 모든 경우의 수 확인: 가능한 모든 조합을 탐색하여 정확한 답을 구합니다.
  2. 간결하고 정확한 답: 올바른 구현이 되었다면 항상 올바른 결과를 얻을 수 있습니다.
  3. 시간 복잡도: 문제의 크기에 따라 지수적으로 증가할 수 있어 큰 입력에는 적합하지 않을 수 있습니다.
  4. 탐색 공간: 재귀 호출이나 반복문을 통해 모든 경우를 탐색하는 과정을 구현합니다.

파이썬 코드를 통해 완전 탐색을 예시로 살펴보겠습니다. 다음은 1부터 N까지의 자연수 중에서 3개를 선택하는 모든 조합을 출력하는 완전 탐색 코드입니다.

from itertools import combinations

def complete_search(n, k):
    numbers = list(range(1, n+1))
    comb = list(combinations(numbers, k))
    return comb

N = 5  # 1부터 N까지의 자연수 중
K = 3  # 3개를 선택하는 모든 조합을 구함

combinations = complete_search(N, K)
print("조합 개수:", len(combinations))
for comb in combinations:
    print(comb)

이 코드는 itertools 라이브러리의 combinations 함수를 사용하여 1부터 N까지의 자연수 중에서 K개를 선택하는 모든 조합을 구하고 출력합니다. 이렇게 완전 탐색을 통해 가능한 모든 경우의 수를 확인할 수 있습니다.