본문 바로가기
프로그래밍/CodeUp

CodeUp[Q_2034] : 인수 분해

by 조원일 2020. 3. 25.
728x90

1. 문제

https://codeup.kr/problem.php?id=2034

 

인수 분해

$a$와 $b$가 입력된다.($-100 <= a, b <= 100$)

codeup.kr

[출처 : 코드업(https://codeup.kr/)]

이번 문제는 주어진 2차방정식의 해를 구하는 문제입니다.

근의 공식을 이용하면 쉽게 해결할수있습니다.

 

 

2. 풀이방법

STEP 1. 근의 공식에서 "b^2-4c"가 음수인지, 정수가 아닌 실수인지 체크
STEP 2. 근의 공식의 값이 정수가 아닌 실수인지 체크
STEP 3. 2중근인지 체크
STEP 4. 두 정수근을 출력

 

 

3. 해답

#include <stdio.h>
#include <math.h>

void print(int n) {
	if (n >= 0) printf("x+%d", n);
	else printf("x%d", n);
}

int main() {
	int b, c, root, x, y;

	scanf("%d %d", &b, &c);

	root = (b * b - 4 * c);

	if (root < 0) {
		// 허수가 나오면
		printf("-1");
		return 0;
	}
	else if ((int)sqrt(root) != sqrt(root)) {
		// 정수가 아닌 실수
		printf("-1");
		return 0;
	}

	root = (int)sqrt(root);

	x = -b + root;
	y = -b - root;


	if (x % 2 != 0 || y % 2 != 0) {
		// 정수가 아닌 실수
		printf("-1");
		return 0;
	}
	else if (root == 0) {
		// 2중근
		if (b > 0) print(b / 2); // 음수일때
		else print(b / 2); // 양수일때
		return 0;
	}
	else {
		// 두근이 모두 정수
		x /= 2;
		y /= 2;
		if (x > y) {
			print(-x);
			printf("\n");
			print(-y);
		}
		else {
			print(-y);
			printf("\n");
			print(-x);
		}
	}

	return 0;
}