이차 방정식 ax² + bx + c = 0에서 이차항의 계수(a), 일차항의 계수(b), 상수항(c)을 각각 나타내는 세 개의 숫자를 입력받아 방정식의 근을 구하는 자바스크립트 함수를 작성해 보겠습니다.
조건은 다음과 같습니다. 근이 실근일 경우에는 그 값을 반환하고, 실근이 존재하지 않으면 false를 반환해야 합니다. 이때 판별식(discriminant)을 활용하면 근의 성질을 간단하게 판별할 수 있습니다.
판별식의 역할
판별식 D = b² − 4ac의 값에 따라 근의 개수와 종류가 결정됩니다.
- D < 0 : 서로 다른 두 실근이 존재하지 않음 → false 반환
- D = 0 : 중근(같은 값의 실근 하나)이 존재
- D > 0 : 서로 다른 두 실근이 존재
예제 코드
다음은 위 조건을 구현한 코드입니다.
const coefficients = [3, 12, 2];
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(coefficients));
코드 설명
- 구조 분해 할당을 통해 계수 배열에서 a, b, c를 추출합니다.
- 판별식 b² − 4ac를 계산한 뒤, 값이 음수면 실근이 없으므로 false를 반환합니다.
- 실근이 존재하면 Math.sqrt()로 판별식의 제곱근을 구하고, 근의 공식 x = (−b ± √D) / 2a를 적용해 두 근을 계산합니다.
실행 결과
콘솔 출력 결과는 다음과 같습니다.
[ -0.17425814164944628, -3.825741858350554 ]
계수 [3, 12, 2]에 대해 방정식 3x² + 12x + 2 = 0의 두 실근이 정상적으로 계산되어 배열 형태로 반환된 것을 확인할 수 있습니다.