성장일기

[python] 백준 1735 - 분수 합 본문

알고리즘 문제

[python] 백준 1735 - 분수 합

김몽몽 2021. 12. 31. 19:59

분자 분모 형태로 숫자가 두 개 주어진다.

두 수의 합을 기약분수형태로 출력하기

 

🧨문제가 너무 간단해서 반례를 찾기가 어려웠다.

import sys
input=sys.stdin.readline

def gcd(a,b):  #최대공약수
    if b==0:
        return a
    else:
        return gcd(b,a%b)

n,m=map(int,input().split())
j,k=map(int,input().split())

num=n*k+m*j  #약분 전 분자
dem=m*k  #약분 전 분모
gcd_=gcd(m,k) #분모끼리의 최대공약수

if dem==0:
    print('0 1')  
"""
분모가 0이면 0 1 출력(반례찾으러 질문검색에서 봤는데
이렇게 출력하는게 맞는지는 모르겠음 일단 AC)
"""
else:
    num=num//gcd_  #약분 후 분자
    dem=dem//gcd_  #약분 후 분모
    gcd_2=gcd(num,dem)
    if gcd_2!=1:  #약분 후의 분모 분자의 최대공약수가 1이 아니면
        print(num//gcd_2,dem//gcd_2)  #최대공약수로 나눠서 출력
    else:  #약분 후의 분모 분자의 최대공약수가 1이면
        print(num,dem)  #그냥출력