Hello Computer Vision

백준 알고리즘 1735번 [분수합] 파이썬 본문

백준알고리즘

백준 알고리즘 1735번 [분수합] 파이썬

지웅쓰 2023. 4. 25. 15:16

https://www.acmicpc.net/problem/1735

 

1735번: 분수 합

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

www.acmicpc.net

접근하기는 쉬웠는데 깔끔한 코드로 접근하기는 어려웠다. 일단 유클리드 호제법을 이용해서 최대공약수를 구해주고, 분모와 분자를 따로따로 구한 후, 분모와 분자에 대한 최대공약수로 나누어주면 되는 문제였다. 처음에 다른 분들의 코드를 보면서 이해가 안간 부분은 분자 부분이었는데 이는 예시로 한번 접근해보면 쉬운 거 같다.

a, b = map(int, input().split())
c, d = map(int, input().split())

def gcd(x, y): # x < y
    while x % y != 0:
        mod = x % y
        x = y
        y = mod
    return y

g1 = gcd(b, d)
demon = b * d // g1
mole = a * (d // g1) + c * (b // g1)

g2 = gcd(demon, mole)
print(mole // g2, demon // g2)