알고리즘/개념

[완전탐색] 알고리즘 - 완전탐색(Brute Force)

코딩하는이씨 2023. 8. 3. 16:57
728x90
반응형

완전 탐색 (Brute Force)

가능한 모든 경우의 수를 탐색하면서 요구 조건에 충족되는 결과를 가져오는 알고리즘 이다.

해가 존재한다는 가정을 세우고 완전 탐색하기 때문에 무조건 정답을 찾을 수 있다.

복잡한 알고리즘을 생각하지 않고 모든 경우를 단순히 살펴본다고 볼 수 있다.

완전 탐색 알고리즘을 풀 때는 탐색해야할 전체 데이터 개수가 100만개 이하일 때 완전 탐색을 사용해야한다.

 

완전 탐색 종류

1. 선형 구조를 전체 탐색하는 순차 탐색

2. 비선형 구조를 전체 탐색하는 DFS(깊이 우선 탐색), BFS(너비 우선 탐색)

 

 

사용 조건

1. 문제에 대한 해결책이 잘 정의 되어 있어야 한다.

- 해결책이 정의되어 있어야 브루트 포스를 사용한 해결책이 올바른 방법인지 확인할 수 있다.

 

2. 문제를 해결할 수 있는 풀이의 수가 제한되어 있어야한다.

- 모든 경우의 수를 탐색해야 하므로 고려해야할 수가 무한하거나 너무 많으면 효율적이지 않다.

 

 

구현 기법

1. 반복문 사용

  • 단순 Brute-Force로 for문과 if문 등으로 모든 case를 설정하여 답을 찾아내는 방식이다. 

2. 재귀 사용

  • 재귀 함수를 통해 문제를 만족하는 경우들을 만들어나가는 방식이다. 
  • 경우의 수가 각 원소가 포함되거나 포함되지 않는 두가지 선택지를 가질 때 사용된다.

3. 비트 마스크

  • 2진수 (비트)를 사용하는 방식이다.
  • 경우의 수가 각 원소가 포함되거나 포함되지 않는 두가지 선택지를 가질 때 사용된다.

4. 순열

  • 완전 탐색의 대표적인 유형이다. 
  • 순열에 원소를 하나씩 채워가는 방식이다. 재귀함수를 사용하여 구현할 수 있다.

5. BFS/DFS

  • 너비 우선 탐색, 깊이 우선 탐색을 완전탐색과 결합해 사용할 수 있다. 
  • 주로 길찾기 문제에 많이 사용된다.

 

 

장점

알고리즘 설계와 구현이 쉽다.

 

단점 

알고리즘 실행 시간이 오래걸린다. (높은 시간 복잡도)

메모리 효율성이 떨어진다.

728x90
반응형