문제
분수 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 |