[Algorithm] Brute Force

Brute Force

알고리즘 방식중 제일 무식한 방법.
즉 문제해결을 위해 모든 방법을 다 시도해보는 것이다.

알고리즘의 조건인 효율의 측면에서는 많이 좋지 못하다.
구현 난이도는 쉽지만, 작동시간이나 메모리사용량에서 상당히 떨어진다.

Brute Force를 한글로 번역해보면 짐승의 힘이다.
문제를 해결하기위해 모든 경우에 대해 직접 연산을 하는 방법과 어울린다.

가령 1부터 100까지 합을 구하라는 문제가 있다면,
조금만 생각해서 고민한다면 가우스의 덧셈처럼
100 * 101 / 2로 5050이란 답을 구할 수 있다.

function gaussAdd(number) {
    return (number+1) * number / 2
}

하지만 우리의 브루트 포스는 다 더한다.

function bruteForce(number) {
  let answer = 0;
  for (let i=1; i<=number; i++) {
    answer += i;
  }
  return answer
}

1부터 100까지는 컴퓨터가 연산하기에 금방한다.
하지만 그 숫자가 1000억이라면..?
물론 컴퓨터는 언어와 환경마다 다르긴하지만
1초에 1억번정도 연산한다.
그래도 불구하고 1000초가 걸린다.

이렇게 효율이 안좋은데도 불구하고,
브루토 포스를 사용하는 이유는 구현이 쉽기 때문이다.
또한 다른 알고리즘을 생각하기에 앞서 도움이 된다.

브루트 포스 알고리즘은 모든 경우를 직접 하는 알고리즘이다.
브루트 포스 알고리즘은 시간 면에서 매우 비효율적인 알고리즘이다.
다만 그만큼 만들기도 쉽고, 다른 알고리즘을 생각하는 출발점이 된다.