Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++로 이차방정식의 해(실근)의 개수 구하기 – 판별식 활용 완벽 가이드

문제 개요

이 문제에서는 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. 1단계 – 판별식 D의 값을 계산합니다. D = b² − 4ac
  2. 2단계 – D > 0이면 해가 2개라고 출력합니다.
  3. 3단계 – D = 0이면 해가 1개라고 출력합니다.
  4. 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)이며, 어떤 계수가 입력되더라도 일정한 시간 안에 결과를 얻을 수 있습니다.