브루트(Brute): 무식한 ✚ 포스(Force): 힘
컴퓨터의 빠른 계산 능력을 이용하여 가능한 경우의 수를 일일이 나열하면서 답을 찾는 방법
- 장점 : 알고리즘을 설계하고 구현하기 쉽다.
- 단점 : 알고리즘 실행 시간이 오래 걸리고, 메모리 효율면에서 비효율적
"양의 정수 1부터 100까지의 임의의 요소가 오름차순으로 하나씩 담긴 배열 중, 원하는 값 N을 찾기"
→ 배열의 첫 요소부터 마지막 요소까지 전부 확인해 최대 100 번의 탐색을 하는 것. 단순히 모든 경우의 수를 탐색하는 모든 경우
단순 for, if문 등으로 모든 경우를 만들어 답을 구하는 방법.
2진수를 이용하는 컴퓨터 연산을 이용한 방식.
나올 수 있는 모든 경우의 수가 각각의 원소가 포함되거나, 포함되지 않는 두 가지 선택으로 구성되는 경우에 사용한다.
5자리 이진수(0~31)을 이용해 각 원소의 포함 여부를 체크할 수 있다.
만들고자 하는 부분집합을 S'라고 할 때, S'={}부터 시작해서 각 원소에 대해 해당 원소가 포함되면 S'에 넣고 재귀함수를 돌리고, 포함되지 않으면 S'를 그대로 재귀 함수에 넣어주는 방식.
비트마스크와 마찬가지로 각 원소가 포함되거나, 포함되지 않는 두 가지 선택으로 구성되는 경우에 사용한다.
완전 탐색의 대표적 유형.
서로 다른 N개를 일렬로 나열하는 순열의 경우의 수는 N! 이므로 완전 탐색을 이용하기 위해선 N이 한자리 수 정도는 되어야한다.
순열에 원소를 하나씩 채워가는 방식이다.
주로 완전탐색 + DFS/BFS 문제가 자주 출제됨.
- 브루트 포스 = 완전 탐색 알고리즘
- 모든 경우의 수를 대입해 결과를 찾는 알고리즘
- 경우의 수에 따라 실행 시간이 증가하므로 시간적인 측면에선 비효율적
- 그러나 단순 반복하기 때문에 알고리즘 설계적인 측면에선 만들기 쉬움