본문 바로가기
코딩테스트

[백준] 1735 분수 합 - Python

by CuckooBird 2023. 2. 10.

백준 실버3 1735 분수 합 Python

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

 

1735번: 분수 합

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

www.acmicpc.net


문제


코드

맞았습니다가 뜬 코드입니다. - 메모리 31256KB | 시간 40ms | 코드 길이 298B

import sys
arr1 = list(map(int, sys.stdin.readline().rstrip().split()))
arr2 = list(map(int, sys.stdin.readline().rstrip().split()))
a = arr1[0] * arr2[1] + arr1[1] * arr2[0]
b = arr1[1] * arr2[1]
def gcd(a, b):
    while b > 0:
        a, b = b, a % b
    return a
x = gcd(a, b)
print(a//x, b//x)

gcd는 유클리드 호제법을 이용하여 최대공약수를 구하는 함수입니다.

 

유클리드 호제법(유클리드 알고리즘)은 최대공약수를 구하는 알고리즘입니다. 호제법이란 말은 두 수가 서로 상대방 수를 나누어서 결국 원하는 수를 얻는 알고리즘을 나타냅니다.

 

a와 b가 있을 때(a > b), a와 b의 나머지와 b의 최대공약수는 a와 b의 최대공약수와 같습니다.

파이썬으로 유클리드 호제법의 알고리즘을 구현한 것은 다음과 같습니다.

def gcd(a, b):
    while b > 0:
        a, b = b, a % b
    return a

 

이를 이용하여 최소공배수를 구할 수도 있습니다.

마찬가지로 a와 b가 있다고 했을 때에,

최소공배수 = 최대공약수 * (a / (최대공약수) * b / (최대공약수)) 이기 때문에 간단하게 계산하면,

최소공배수 = a * b / 최대공약수

이라는 식을 도출 할 수 있습니다.

따라서 파이썬으로 최소공배수를 구하는 코드는 다음과 같습니다.

def lcm(a, b):
    return a * b / gcd(a, b)

 


Try 1.

시간초과가 뜬 코드입니다. - 코드 길이 311B

import sys
arr1 = list(map(int, sys.stdin.readline().rstrip().split()))
arr2 = list(map(int, sys.stdin.readline().rstrip().split()))
a = arr1[0] * arr2[1] + arr1[1] * arr2[0]
b = arr1[1] * arr2[1]
for i in range(2, min(a, b)):
    if a % i == 0 and b % i == 0:
        a = a // i
        b = b // i
print(a, b)
  • 유클리드 호제법을 이용하지 않았습니다.

Search 🔍


오늘의 유우머

공대생의 기침소리는?

 

클록(clock)! 클록(clock)!

 

🤣

'코딩테스트' 카테고리의 다른 글

[백준] 1913 달팽이 - Python  (2) 2023.02.12
[백준] 1026 보물 - Python  (2) 2023.02.11
[백준] 5911 선물 - Python  (2) 2023.02.09
[백준] 26267 은?행 털!자 1 - python  (3) 2023.02.08
[백준] 1183 약속 - python  (1) 2023.02.08