직역하자면, 무식한 힘.
모든 경우의 수를 탐색하는 알고리즘이다.
모든 경우를 탐색하는 만큼, 시간과 자원이 많이 소모되지만,
놓치는 경우 없이 확실하게 결과값을 찾을 수 있다.
코드로 Brute Force
를 표현하자면, for
와 if
의 조합이라고 표현하고 싶다.
브루트 포스 종류
- 단순 Brute-Force
- 비트마스크(Bitmask)
- 재귀 함수
- 순열 (Permutation)
- BFS / DFS
출처: https://rebro.kr/59 [Rebro의 코딩 일기장]
가장 기본이 되는 별 찍기 문제이다.
for(let i=0;i<5;i++){
for(let j=0;j<5;j++){
document.write('*');
}
document.write('<br>');
}
이런 식으로 모든 경우를 탐색하는 알고리즘을 브루트 포스(완전 탐색) 이라고 부른다.
이런 간단한 문제 외에도 조금은 복잡한(?) 문제들도 브루트 포스로 풀 수 있다.
https://programmers.co.kr/learn/courses/30/lessons/42842
function solution(brown, yellow) {
for (let i = 1; i < yellow; i++) {
for (let j = yellow; j >= 1; j--) {
if (i * j === yellow) {
if (brown === (i * 2 + j * 2 + 4)) {
return [j + 2, i + 2]
}
}
}
}
}
https://www.acmicpc.net/problem/7568
n = int(input())
def chart(n):
# [몸무게, 키] 형식으로 되어있는 덩치 차트 생성(0으로 초기화)
info = [[0]*2 for i in range(n)]
# 등수가 들어있는 리스트
rank = [1]*n
# 덩치 차트에 input값 넣기
for i in range(n):
info[i] = list(map(int, input().split()))
# 덩치 비교
for i in range(n):
for j in range(n):
# person 1의 몸무게, 키 모두의 덩치가 밀릴 때, rank++
if info[i][0] > info[j][0] and info[i][1] > info[j][1]:
rank[j] += 1
return rank
# 출력
for i in chart(n):
print(i)