
- 문제 선정 이유 : 알고리즘 문제 해결 재활 용 낮은 난이도 문제 풀이
- Solved.ac 기준 실버 2
- 사용언어 C++
문제 해석
- 판별식을 이용
- 판별식 : res = B^2 - 4AC
- res > 0 -> 서로 다른 두 실근
- res = 0 -> 중근
- res = < 0 -> 허근
- 실근을 가질 때, 근의 공식을 통해 계산
- b, c가 a로 나눴을 때 나머지가 0이 아니면 정수해가 아님
문제 풀이
- 우선 중근, 허근의 둘다틀렸군 케이스 먼저 처리
- 여타 다른 둘다틀렸군 케이스 처리
- 2의 거듭제곱인지 확인하여 이수근 케이스 먼저 처러
- 다 아닐 경우 정수근
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
int main() {
cin.tie(NULL);
ios_base::sync_with_stdio(false);
int a, b, c;
cin >> a >> b >> c;
int res = b * b - 4 * a * c;
if (b % a != 0 || c % a != 0 || res <= 0) {
cout << "둘다틀렸근";
return 0;
}
for (int i = 2; i <= 256; i *= 2) {
for (int j = 2; j <= 256; j *= 2) {
if (i == j) continue;
if (a * i * i + b * i + c == 0 && a * j * j + b * j + c == 0) {
cout << "이수근";
return 0;
}
}
}
for (int i = -200; i <= 200; i++) {
for (int j = -200; j <= 200; j++) {
if (i == j) continue;
if (a * i * i + b * i + c == 0 && a * j * j + b * j + c == 0) {
cout << "정수근";
return 0;
}
}
}
cout << "둘다틀렸근";
return 0;
}