문제

분수 A/B는 분자가 A, 분모가 B인 분수를 의미한다. A와 B는 모두 자연수라고 하자.

두 분수의 합 또한 분수로 표현할 수 있다. 두 분수가 주어졌을 때, 그 합을 기약분수의 형태로 구하는 프로그램을 작성하시오. 기약분수란 더 이상 약분되지 않는 분수를 의미한다.

입력

첫째 줄과 둘째 줄에, 각 분수의 분자와 분모를 뜻하는 두 개의 자연수가 순서대로 주어진다. 입력되는 네 자연수는 모두 30,000 이하이다.

출력

첫째 줄에 구하고자 하는 기약분수의 분자와 분모를 뜻하는 두 개의 자연수를 빈 칸을 사이에 두고 순서대로 출력한다.

예제 입력 1 

2 7
3 5

예제 출력 1 

31 35

분수의 합을 구하려면 먼저 분모를 공통 분모로 바꾸어야 한다. 그러기 위해 먼저 분모끼리 곱해주고, 그 값을 분자에도 동일하게 곱해준다.

2 7 -> * 5 -> 10 35

3 5 -> * 7 -> 21 35

예제 에서는 서로소로 예시가 나와 그대로 더해주면 정답이 나오지만, 문제에서 정확하게 기약분수로 표현하라 하였으니,

더 이상 약분이 되지 않도록 하는 수는 분자와 분모의 최대공약수 이므로, 최종적으로 분자와 분모를 최대공약수로 나눈 값이 정답이다.

정답 코드는 아래와 같다.

import sys, math

A, B = map(int, sys.stdin.readline().split())
C, D = map(int, sys.stdin.readline().split())

d = B * D
u = (A * D) + (C * B)
k = math.gcd(d, u)

print(u // k, d // k)

 

'BaekJoon' 카테고리의 다른 글

[Python] 17103. 골드바흐 파티션  (0) 2025.04.15
[Python] 1929.소수 구하기  (0) 2025.04.12
[Python] 4134. 다음 소수  (0) 2025.04.12
[Python] 2485. 가로수  (0) 2025.04.10
[Python] 1934. 최소공배수  (1) 2025.04.08

+ Recent posts