알고리즘/백준

파이썬 / 백준 1735번: 분수 합

KimMinGyun 2024. 1. 6. 23:38

문제 링크 https://www.acmicpc.net/problem/1735

 

1735번: 분수 합

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

www.acmicpc.net

 

문제

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

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

입력

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

출력

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

 

풀이

 

입력 

2 7

3 5

 

분자와 분모의 최대공약수로 분자와 분모를 나누면 기약분수가 된다!!

 

유클리드 호제법 - https://wikidocs.net/21759

 

3. 최대공약수 구하기 - 유클리드 호제법

> a와 b 의 최대공약수는 (a를 b로 나눈 나머지)와 b 의 최대공약수와 같다. 큰 수를 작은 수로 나누어 구한 나머지로 큰 수를 대체한다. 큰 수를 작은 수로 계속 나누…

wikidocs.net

 

코드

 

def gcd(x, y):
    if x % y == 0:
        return y
    else:
        return gcd(y, x % y)

A1, B1 = map(int, input().split())
A2, B2 = map(int, input().split())

x, y = A1*B2+A2*B1, B1*B2 # x = 분자 y = 분모
z = gcd(x, y)
print(x//z, y//z)

 

'알고리즘 > 백준' 카테고리의 다른 글

4796번: 캠핑  (0) 2024.06.20
5585번: 거스름돈 [python]  (0) 2024.06.20
27737 버섯농장 [파이썬]  (1) 2024.06.19
파이썬 / 1783번: 병든 나이트  (1) 2024.01.07
파이썬 / 9461번: 파도반 수열  (0) 2024.01.07