문제
첫 번째 분수의 분자와 분모를 뜻하는 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 |