문제

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

답안

틀린 답안

def solution(numer1, denom1, numer2, denom2):
    total_numer = (numer1 * denom2) + (numer2 * denom1)
    total_denom = (denom1 * denom2)
    
    for i in range(min(total_numer, total_denom), 0, -1):
      print(i)
      if (total_numer / i == 0) and (total_denom / i == 0):
          gcd = i
    
    return [total_numer / gcd, total_denom / gcd]
    
solution(1,2,3,4)
# error: local variable 'gcd' referenced before assignment

정답 1

def solution(numer1, denom1, numer2, denom2):
    total_numer = (numer1 * denom2) + (numer2 * denom1)
    total_denom = (denom1 * denom2)
    
    for i in range(1, total_denom+1):
      if (total_numer % i == 0) & (total_denom % i == 0):
          gcd = i
            
    return [total_numer / gcd, total_denom / gcd]

두 분수를 더한 값을 기약분수로 나타내기 위해서는 분수끼리 더한 후 최대 공약수로 나눠줘야 합니다.

최대 공약수란 두 수의 공약수 중 가장 큰 값을 나타냅니다. 최소공약수인 1부터 분수끼리 더한 값의 분자까지 모든 값을 반복문에 넣어 동시에 1로 나눠진다면 최대공약수가 될 것입니다.

정답 2

from fractions import Fraction

def solution(denum1, num1, denum2, num2):
    answer = Fraction(denum1, num1) + Fraction(denum2, num2)
    return [answer.numerator, answer.denominator]

파이썬에는 fractions라는 좋은 모듈이 있습니다. Fraction은 첫 번째 인자로 분수, 두 번째 인자로 분모를 넣어준다면 두 수의 기약분수를 만들어줍니다.

또한 numerator, denominatior 함수를 통해 기약분수의 분자와 분모를 확인할 수 있습니다.

'Coding Test' 카테고리의 다른 글

[python] 피자 나눠 먹기(2)  (0) 2023.03.02
[python] 최빈값 구하기  (0) 2023.02.24
[python] 중앙값 구하기  (0) 2023.02.24
[python] Class  (0) 2023.02.15
[python] 함수  (0) 2023.01.31

+ Recent posts