1. 목적
- 시행착오의 기본 알고리듬인 Brute force 을 간단하게 이해한다.
2. 문제
- 다음 5차 방정식이 있다.
- 이 방정식의 해는 5개이며 -10 부터 10까지 있으며 정수로 되어 있다.
- 해를 구하라. 거듭제곱을 구하는 함수는 math.h 에 있는 pow 함수를 쓴다.
- 출력 화면
주어진 오차방정식의 근 : -4 -1 2 3 5
Press any key to continue
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 네이버 사전