19. Python(분수 합)
19. Python(분수 합)
[toc]
최소공배수
문제
제출
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import sys
input = sys.stdin.readline
def gcd(a, b):
while b > 0:
a, b = b, a % b
return a
a, b = map(int, input().split())
c, d = map(int, input().split())
x = (a * d) + (c * b)
y = b * d
g = gcd(x, y)
x //= g
y //= g
print(x, y)
1
2
3
# 입력
2 7
3 5
1
2
# 출력
31 35
인사이트
- 기약분수로 나타내기 위해서 분모와 분자의 최대공약수를 구한 후 각각 나누면 된다고 생각했음
풀이
1. 최대공약수(gcd)
1
2
3
4
def gcd(a, b):
while b > 0:
a, b = b, a % b
return a
- 물론
from math import gcd
를 사용해서 할 수 있지만 함수를 구현했음 - 함수의 로직
- b가 0이 될 때 a값이 최대공약수가 되는 것
2. 최소공배수(lcm)
- 최대공약수와 최소공배수의 관계
1
2
3
4
5
6
a = 3(1, 3)
b = 4(1, 2, 4)
gcd = 1
lcm = (a * b) // gcd
lcm = 12 // 1 = 12
- 관계를 활용하여 분수의 합을 구한 후 분모와 분자의 최대공약수를 구한 후 각각 나눠줌으로써 기약분수의 형태로 변환함