첫 번째 분수의 분자와 분모를 뜻하는 numer1, denom1, 두 번째 분수의 분자와 분모를 뜻하는 numer2, denom2가 매개변수로 주어집니다. 두 분수를 더한 값을 기약 분수로 나타냈을 때 분자와 분모를 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요.
원래 문제 풀던대로 분수의 답을 구하면 결과가 소수로 나와서 곤란함
그래서 분수의 덧셈 과정을 코드로 풀어야 했음
제출한 코드 :
import math
def solution(numer1, denom1, numer2, denom2):
answer = [0,0]
answer[1]=denom1 * denom2
answer[0]=int((answer[1]/denom1)*numer1 + (answer[1]/denom2)*numer2)
gcd = math.gcd(answer[0], answer[1])
if gcd!=1 :
answer[0]=answer[0]/gcd
answer[1]=answer[1]/gcd
return answer
분자, 분모는 구했는데 기약분수로 어떻게 나타내는지 고민하다가 찾아보니까 기약분수는 분자분모가 최대공약수 1임!!
이걸 이용해서 gcd 변수로 답 구했음
좀더 간단하게 나타내려면 어떻게 해야하는지 보려고 다른 사람 풀이봄
import math
def solution(denum1, num1, denum2, num2):
denum = denum1 * num2 + denum2 * num1
num = num1 * num2
gcd = math.gcd(denum, num)
return [denum//gcd, num//gcd]
일단 나는 맨처음에 기약분수 생각을 안해서 answer[1]이 약간 복잡하게 써졌는데, 이후 gcd로 기약분수 만들거면 위 코드처럼 작성하면 됐다는 걸 알 수 있었음. 그리고 이미 기약분수라면 최대공약수를 구해도 1이니까 기약분수든 아니든 그냥 최대공약수로 나눠도 똑같은 결과를 얻을 수 있음.
앞으로 더 간단하고 효율적으로 코드쓰는 방법을 생각해봐야겠다.
시행착오를 두려워하지 말장⭐