✅ 완전 탐색(브루트 포스)

자몽·2021년 8월 1일
1

Brute Force

직역하자면, 무식한 힘.

모든 경우의 수를 탐색하는 알고리즘이다.

모든 경우를 탐색하는 만큼, 시간과 자원이 많이 소모되지만,
놓치는 경우 없이 확실하게 결과값을 찾을 수 있다.

코드로 Brute Force를 표현하자면, forif의 조합이라고 표현하고 싶다.

브루트 포스 종류

  • 단순 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)
profile
꾸준하게 공부하기

0개의 댓글