최소공배수 최대공약수

하는·2024년 10월 1일
1

최대공약수 함수

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

최소공배수 함수

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

응용: 분수의 덧셈

문제

첫 번째 분수의 분자와 분모를 뜻하는 numer1, denom1, 두 번째 분수의 분자와 분모를 뜻하는 numer2, denom2가 매개변수로 주어집니다. 두 분수를 더한 값을 기약 분수로 나타냈을 때 분자와 분모를 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요.

제한사항

0 <numer1, denom1, numer2, denom2 < 1,000

입출력 예

입출력 예 설명

입출력 예 #1
1 / 2 + 3 / 4 = 5 / 4입니다. 따라서 [5, 4]를 return 합니다.

입출력 예 #2
9 / 2 + 1 / 3 = 29 / 6입니다. 따라서 [29, 6]을 return 합니다.

풀이

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

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

def solution(numer1, denom1, numer2, denom2):
    # 두 분모의 최소 공배수를 구합니다.
    min_ = lcm(denom1, denom2)

    # 공통 분모를 사용하여 두 분수를 더합니다.
    numer = numer1 * ( min_// denom1) + numer2 * (min_ // denom2)
    denom = min_
    
    # 결과 분수를 기약 분수로 만들기 위해 분자와 분모의 최대 공약수를 구합니다.
    max_ = gcd(numer, denom)
    
    # 분자와 분모를 최대 공약수로 나눕니다.
    return [numer // max_, denom // max_]
profile
천천히 꾸준히 취미처럼 냐미😋

0개의 댓글