문제 정의
이번 글에서는 세 개의 숫자를 인자로 받아 이차방정식의 해(근)를 구하는 JavaScript 함수를 작성해 보겠습니다. 세 숫자는 순서대로 이차항의 계수(a), 일차항의 계수(b), 상수항(c)을 의미합니다.
함수는 방정식의 실근을 배열 형태로 반환하고, 만약 실근이 존재하지 않는다면 false를 반환해야 합니다.
수학적 배경
일반형이 ax² + bx + c = 0인 이차방정식은 근의 공식을 사용하여 해를 구할 수 있습니다. 먼저 판별식 D = b² − 4ac를 계산하며, 그 값에 따라 해의 성질이 결정됩니다.
- D ≥ 0 : 서로 다른 두 실근 또는 중근이 존재
- D < 0 : 실근이 존재하지 않음 (허근)
실근이 존재하는 경우에는 근의 공식 x = (−b ± √D) / 2a를 적용하여 두 근을 구합니다.
구현 예제
위 내용을 바탕으로 작성한 코드는 다음과 같습니다.
const coeff = [1, 12, 3];
const findRoots = co => {
const [a, b, c] = co;
const discriminant = (b * b) - 4 * a * c;
// 실근이 존재하지 않는 경우
if(discriminant < 0){
return false;
};
const d = Math.sqrt(discriminant);
const x1 = (d - b) / (2 * a);
const x2 = ((d + b) * -1) / (2 * a);
return [x1, x2];
};
console.log(findRoots(coeff));
실행 결과
콘솔에 출력되는 결과는 다음과 같습니다.
[ -0.2554373534619714, -11.744562646538029 ]
코드 설명
입력된 계수 [1, 12, 3]은 방정식 x² + 12x + 3 = 0에 해당합니다. 판별식은 12² − 4×1×3 = 132로 양수이므로 두 개의 실근이 존재합니다.
Math.sqrt()로 판별식의 제곱근을 구한 뒤 근의 공식에 대입하면 x₁ ≈ −0.2554와 x₂ ≈ −11.7446이라는 두 실근을 얻을 수 있습니다. 참고로 두 근의 합은 −12(= −b/a), 곱은 3(= c/a)이 되므로 근과 계수의 관계도 성립함을 확인할 수 있습니다.