백준 15888번 : 정답은 이수근이야!!

M1ndCon·2024년 6월 25일
0

Algorithm

목록 보기
5/32

  • 문제 선정 이유 : 알고리즘 문제 해결 재활 용 낮은 난이도 문제 풀이
  • Solved.ac 기준 실버 2
  • 사용언어 C++

문제 해석

  • 판별식을 이용
  • 판별식 : res = B^2 - 4AC
  • res > 0 -> 서로 다른 두 실근
  • res = 0 -> 중근
  • res = < 0 -> 허근
  • 실근을 가질 때, 근의 공식을 통해 계산
  • b, c가 a로 나눴을 때 나머지가 0이 아니면 정수해가 아님

문제 풀이

  1. 우선 중근, 허근의 둘다틀렸군 케이스 먼저 처리
  2. 여타 다른 둘다틀렸군 케이스 처리
  3. 2의 거듭제곱인지 확인하여 이수근 케이스 먼저 처러
  4. 다 아닐 경우 정수근
#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;
}
profile
게임 개발자 지망생

0개의 댓글