1. 목적

  - 시행착오의 기본 알고리듬인 Brute force 을 간단하게 이해한다.

2. 문제
  - 다음 5차 방정식이 있다.

사용자 삽입 이미지

  - 이 방정식의 해는 5개이며 -10 부터 10까지 있으며 정수로 되어 있다.
  - 해를 구하라. 거듭제곱을 구하는 함수는 math.h 에 있는 pow 함수를 쓴다.
  - 출력 화면
 

주어진 오차방정식의 근 : -4 -1 2 3 5
Press any key to continue

3. 이해
  - 강제로 대입 해서 해결책을 찾는 Brute Force 를 어느정도 이해 했는가?
  - 방정식의 기본 원리를 알고 있는가?

4. 코드

#include <stdio.h>
#include <math.h>

int main()
{
 int i,solve;

 printf("주어진 오차방정식의 근 : ");

 for(i = -10; i <= 10; i++)
 {
  solve = (int)pow(i,5) - 5 * (int)pow(i,4) - 15 * (int)pow(i,3) + 85 * (int)pow(i, 2) - 26 * i - 120;
  if (solve == 0) printf("%d ", i);

 }

 putchar('\n');

 return 0;
}

5. 해설
  - 범위가 제한적이므로 일일이 대입 하면 됩니다. 근의 공식이나 특별한 해결책을 쓰는게 아니라 범위가 제한되어 있으며 조건이 확실하면 그 범위에 있는 후보값을 일일이 구하는 방법을 써서 풀수 있습니다.
  - 시행착오를 통해서 얻어지지만 결과는 조건이 확실하다면 계산하는 거와 동일하며 속도 또한 빠를수 있습니다. 조건에서 -10 ~ 10 까지의 정수라 했으므로 -10, -9, -8, ... 9, 10 일일이 대입해서 구합니다.
  - for 문이 대신 이 역할을 함으로 코드가 간소합니다.

6. 참고
  - http://terms.naver.com/item.nhn?dirId=200&docId=21680  : Brute Force 네이버 사전

Posted by 카켈