공부 기록

C++ 알고리즘 - 브루트 포스

by 너나나

브루트 포스는 모든 경우의 수를 다 해보는 것이다.

예를 들어, 비밀번호가 4자리이고 숫자로만 이루어져있다고 한다면 0000부터 9999까지 10000가지의 경우의 수를 다 해보면 된다!! (1억 개에 대충 1초 정도 걸리니까 10000가지면 엄청 짧은 시간 안에 계산 가능!!)

그런데 비밀번호가 12자리이고 숫자로만 이루어져있다면 000000000000에서 9999999999999까지 경우의 수를 다 구하는 건 어렵다!!!

 

따라서 브루트 포스는 모든 경우의 수를 다 해보는 것인데 이때 경우의 수를 다 해보는데 걸리는 시간이 문제의 시간 제한을 넘지 않아야 한다!!

 

브루트 포스로 문제를 풀기 위해서는 다음과 같은 3가지 단계를 생각해볼 수 있다.

1. 문제의 가능한 경우의 수를 계산해본다.

- 직접 계산을 통해서 구한다.

2. 가능한 모든 방법을 다 만들어본다.

- 하나도 빠짐 없이 만들어야 한다.

- 대표적으로 그냥 다 해보는 방법, for문 사용, 순열 사용, 재귀 호출 사용, 비트 마스크 사용이 있다.

3. 각각의 방법을 이용해 답을 구해본다.

 

브루트 포스 문제의 시간 복잡도는 대부분 O(경우의 수 * 방법 1개를 시도해보는데 걸리는 시간복잡도) 가 걸린다.

 

'study > 알고리즘' 카테고리의 다른 글

C++ 백준 3085번  (0) 2021.01.07
C++ 백준 2309번  (0) 2021.01.05
C++ 백준 2156번  (1) 2021.01.05
C++ 백준 9465번  (0) 2021.01.05
C++ 백준 1309번  (0) 2021.01.04

블로그의 정보

공부 기록

너나나

활동하기