Algorithm/코드플러스
[0626] 브루트포스
jihyun03
2020. 6. 26. 14:48
01. 개념
-
브루트 포스는 모든 경우의 수를 다 해보는 것이다.
-
이 때, 경우의 수를 다 해보는데 걸리는 시간이 문제의 시간 제한을 넘지 않아야 한다.
-
예를 들어, 비밀번호가 4자리이고, 숫자로만 이루어져 있다고 한다면
-
0000부터 9999까지 다 입력해보면 된다.
-
경우의 수가 10,000가지 이다.
-
사람이 직접 비밀번호를 입력하는데 1초가 걸린다면 10,000초 = 2.7시간 정도 걸린다.
02. 브루트 포스 3단계 풀이법
1. 문제의 가능한 경우의 수를 계산한다.
- 직접 계산을 통해서 구한다. 대부분 손으로 계산해볼 수 있다.
2. 가능한 모든 방법을 다 만들어본다.
- 하나도 빠짐 없이 만들어야 한다.
- 대표적으로 그냥 다 해보는 방법, for문 사용, 순열 사용, 재귀호출 사용, 비트마스크 사용이 있다.
3. 각각의 방법을 이용해 답을 구해본다.
- 이 단계는 보통은 어렵지 않다. 문제에 나와있는 대로 답을 계산해본다.
▶ 브루트 포스 문제의 시간 복잡도는 대부분 O(경우의 수 * 방법 1개를 시도해보는데 걸리는 시간 복잡도 )가 걸린다.