문제 개요
이 문제에서는 a, b, c가 상수인 ax² + bx + c 형태의 이차방정식이 주어집니다. 목표는 C++ 프로그램을 작성하여 해당 이차방정식이 가지는 해(실근)의 개수를 구하는 것입니다.
문제 설명 – 이차방정식은 최대 2개의 해를 가질 수 있으므로, 주어진 방정식의 해가 정확히 몇 개인지 판별해야 합니다.
예제로 이해하기
예제 1
- 입력: 3x² + 7x + 4
- 출력: 2
- 설명: 판별식이 양수이므로 서로 다른 두 개의 실근(-1과 -4/3)을 가집니다.
예제 2
- 입력: x² − 4x + 4
- 출력: 1
- 설명: 방정식의 유일한 해는 2입니다. (중근)
예제 3
- 입력: 2x² + 2x + 2
- 출력: 0
- 설명: 판별식이 음수이므로 실근이 존재하지 않습니다.
해결 접근 방법
이차방정식의 해의 개수를 구하려면 판별식(Discriminant, D)의 값으로 해의 성질을 확인해야 합니다. 이차방정식의 근은 다음 근의 공식으로 구할 수 있습니다.
x = (−b ± √D) / 2a, D = b² − 4ac
즉, 판별식 D의 값이 곧 이차방정식의 근의 개수를 결정합니다.
- D > 0 → 서로 다른 두 개의 실근 (해 2개)
- D = 0 → 중근 (해 1개)
- D < 0 → 실근 없음 (해 0개, 근이 허수가 됨)
알고리즘
- 1단계 – 판별식 D의 값을 계산합니다. D = b² − 4ac
- 2단계 – D > 0이면 해가 2개라고 출력합니다.
- 3단계 – D = 0이면 해가 1개라고 출력합니다.
- 4단계 – D < 0이면 해가 0개라고 출력합니다.
C++ 구현 예제
#include <iostream>
using namespace std;
int checkSolution(int a, int b, int c) {
if (((b * b) - (4 * a * c)) > 0)
return 2;
else if (((b * b) - (4 * a * c)) == 0)
return 1;
else
return 0;
}
int main() {
int a = 2, b = 2, c = 3;
cout << "The quadratic equation is " << a << "x^2 + " << b << "x + " << c << " has ";
cout << checkSolution(a, b, c) << " solutions";
return 0;
}
실행 결과
The quadratic equation is 2x^2 + 2x + 3 has 0 solutions
코드 설명
checkSolution 함수는 계수 a, b, c를 전달받아 판별식 (b² − 4ac)을 계산한 뒤, 그 값에 따라 2, 1, 0을 반환합니다. main 함수에서는 예시 방정식 2x² + 2x + 3에 대해 결과를 출력하는데, 이 방정식의 판별식은 4 − 24 = −20으로 음수이므로 실근이 존재하지 않아 0이 출력됩니다.
이 알고리즘은 단순한 산술 연산과 조건 비교만 수행하므로 시간 복잡도는 O(1)이며, 어떤 계수가 입력되더라도 일정한 시간 안에 결과를 얻을 수 있습니다.