브루트 포스
브루트 포스는 가능한 모든 경우의 수를 다 시도해보면서 문제를 푸는 방식이다. 이때, 경우의 수를 모두 해보는데 걸리는 시간이 문제의 제한시간을 넘기지 않아야 한다.
예시) 숫자로만 이루어진 n자리 비밀번호 알아내기
비밀번호의 자리수 | 가능한 범위 | 경우의 수 | 입력 하나에 1초로 따진 소요시간 |
4자리 | 0000 ~ 9999 | 10000가지 | 10000초 = 약 2.7시간 |
5자리 | 00000 ~ 99999 | 100000가지 | 100000초 = 약 1일 3시간 |
6자리 | 000000 ~ 999999 | 1000000가지 | 1000000초 = 약 11일 12시간 |
12자리 | 000000000000 ~ 999999999999 | 1000000000000가지 | 1000000000000초 = 약 31688년 |
브루트 포스로 문제를 풀기 위한 방법
1. 문제의 가능한 경우의 수를 계산해본다.
- 직접 손으로 계산해본다.
2. 가능한 모든 방법을 다 만들어본다.
- 하나도 빠짐 없이 만들어야 한다.
- 대표적인 방법으로 for문 사용, 순열 사용, 재귀 호출 사용, 비트마스크 사용이 있다.
3. 각각의 방법을 이용해 답을 구해본다.
- 브루트 포스 문제의 시간 복잡도는 O(경우의 수 * 방법 1개를 시도해보는 걸리는 시간복잡도)가 걸린다.
브루트 포스 문제
https://www.acmicpc.net/problem/2309
https://www.acmicpc.net/problem/3085
https://www.acmicpc.net/problem/1476
https://www.acmicpc.net/problem/1107
https://www.acmicpc.net/problem/14500
'🧑💻코딩 테스트 > 알고리즘' 카테고리의 다른 글
[코딩테스트/알고리즘] 그래프(Graph) - 그래프의 표현 (0) | 2022.12.09 |
---|---|
[코딩테스트/알고리즘] 그래프(Graph) - 그래프 종류, 그래프 용어 (0) | 2022.10.27 |
[코딩테스트/알고리즘] 다이나믹 프로그래밍(Dynamic Programming) (0) | 2022.08.29 |
[코딩 테스트/알고리즘] 알고리즘 공부 시작 (0) | 2022.06.29 |
댓글