이 게시글은 CS(컴퓨터공학) 프로그래밍 기초를 어느 정도 알고 있다고 가정하고 아주 간단하게 설명하는 게시글입니다.
혹시나 모르는 부분이 있으면 댓글로 질문해주세요.
이번에는 브루트 포스 알고리즘(Brute Force)입니다.
이 알고리즘은 이름을 보면 뭔가 멋있는 알고리즘으로 보이죠?
그런데 실상은 "무식하게 나올 때까지 전부 다 탐색하자!"입니다.
예시 하나 들어볼까요?
비밀번호가 3945라고 가정합니다.
브루트 포스 알고리즘을 활용하면 0부터 9999까지 모두 다 대입해서 비밀번호 3945를 찾아냅니다.
import sys
input = sys.stdin.readline
target:int = 3945
status:bool = False
password:int = 0
while password <= 9999 :
if password == target :
status = True
break
password += 1
if status :
print(f"자물쇠가 해제되었습니다! 비밀번호는 {password}입니다.")
else :
print("비밀번호를 찾지 못 했습니다.")
이것을 소스 코드로 구현하면 다음과 같습니다.
현실에서 자물쇠 번호를 맞출 때 일일히 다 맞춰가는 것과 동일합니다.
또 다른 예시가 존재합니다.
import sys
input = sys.stdin.readline
def find_number(target:int) -> bool :
L:list = [3, 4, 5, 1, 2, 9, 8, 7, 0]
for index in range(len(L)) :
if L[index] == target :
return True
return False
print(find_number(7)) # 결과 : True
print(find_number(6)) # 결과 : False
"혹시 리스트 안에 해당 숫자가 있는지 찾을려면 어떻게 해야 하나요?"
이진 탐색 등의 알고리즘을 활용하는 방법도 있지만 만약 양자 컴퓨터 수준의 놀라운 성능이라서 알고리즘 구현하는데 머리가 아프다면 그럴 때 브루트 포스 알고리즘을 사용해주세요!
모든 경우를 다 탐색해서 예외 사항이 존재하지 않습니다!
만약 프로그램 실행을 했는데 속도가 느리다면 그 컴퓨터 성능이 느린 탓으로 할 수 있는 것이 브루트 포스 알고리즘의 매력입니다!
물론 실제로는 데이터 개수가 적을 때만 유용하고, 데이터 개수가 많아지면 브루트 포스 알고리즘은 명확히 한계점이 존재합니다.
브루트 포스 알고리즘은 이렇게 암기해주세요.
"모든 경우의 수를 다 찾아주는 상남자 알고리즘!"
"만약 속도가 느리다면 컴퓨터 성능 탓을 할 수 있는 상남자 알고리즘!"
이렇게만 외워주시면 여러분도 브루트 포스 알고리즘을 쉽게 구현할 수 있습니다!
'초간단 알고리즘 설명' 카테고리의 다른 글
| [알고리즘 설명][Python] 유클리드 호제법(euclidean algorithm) (0) | 2026.06.15 |
|---|---|
| [알고리즘 설명][Python] 해싱(hashing) (0) | 2026.06.14 |
| [알고리즘 설명][Python] 소수 판정(prime test) (0) | 2026.06.11 |
| [알고리즘 설명][Python] 피타고라스 정리(pythagoras' theorem) (0) | 2026.06.10 |
| [알고리즘 설명] 알고리즘 구현에 필요한 간단한 Python 기초 문법 모음 (0) | 2026.06.09 |