포스트

(백준/C++) 1735_분수합

1735번:분수 합 (acmicpc.net) 문제는 단순히 두 분수를 입력 받아 합한 다음에 기약분수로 만드는 문제입니다.

다만, 기약분수로 만들 때, 분자와 분모의 최대 공약수(GCD)를 구하고 이를 이용하면 됩니다.

최대 공약수(GCD)는 아래 글에서 확인할 수 있습니다.

유클리드 호제법과 최대 공약수(GCD), 최소 공배수(LCM)

풀이

이 문제는 단순히 분수 두 개만 입력 받으니 그에 대한 입력만 받으면 됩니다.

두 분수의 합은 다음과 같이 구할 수 있습니다.

\[\frac{A}{B} + \frac{C}{D} = \frac{A \times D + B \times C}{B \times D}\]

또한, 합해진 분수를 기약분수로 만들기 위해, 분자와 분모의 최대공약수(GCD)를 구하고, 이를 사용하여 분자와 분모를 나눕니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <cstdio>

int GCD(int a, int b)
{
	while (b != 0)
	{
		int r = a % b;
		a = b;
		b = r;
	}
	return a;
}

int main()
{
	int c1, p1, c2, p2, c, p;
	scanf("%d %d %d %d", &c1, &p1, &c2, &p2);

	p = p1 * p2;
	c = c1 * p2 + c2 * p1;

	int gcd = GCD(c, p);

	printf("%d %d", c / gcd, p / gcd);
}

참고

유클리드 호제법과 최대 공약수(GCD), 최소 공배수(LCM)

이 기사는 저작권자의 CC BY-NC-ND 4.0 라이센스를 따릅니다.