[프로그래머스|Python] 분수의 덧셈

Joo·2024년 6월 25일

CS & Algorithm etc

목록 보기
7/33

문제

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


해설

# 내 답
def solution(numer1, denom1, numer2, denom2):
    
    def gcd(a, b):
        while b:
            a, b = b, a % b
        return a

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

    # 분모의 최소공배수 찾기
    lcm_lower = lcm(denom1, denom2)
    
    # 분모를 맞추기 위한 분자 계산
    numer1 *= lcm_lower // denom1 
    numer2 *= lcm_lower // denom2

    # 분자 더하기
    upper = numer1 + numer2

    # 최대공약수로 약분
    gcd = gcd(upper, lcm_lower)
    upper //= gcd
    lower //= gcd

    return [upper, lower]


# math 라이브러리를 활용한 답안
import math

def solution(denum1, num1, denum2, num2):
    # 1. 두 분수의 합 계산
    boonmo = num1 * num2
    boonja = denum1 * num2 + denum2 * num1
    
    # 2. 최대공약수 계산
    gcd_value = math.gcd(boonmo, boonja)
    
    # 3. gcd 로 나눈 값을 answer에 담기
    answer = [boonja / gcd_value, boonmo / gcd_value]
    return answer
profile
적당히 공부한 거 정리하는 곳

0개의 댓글