[python] 분수의 덧셈

다인·2023년 1월 13일
0

코딩테스트

목록 보기
1/2

프로그래머스 코딩테스트 입문 - 분수의 덧셈

첫 번째 분수의 분자와 분모를 뜻하는 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이니까 기약분수든 아니든 그냥 최대공약수로 나눠도 똑같은 결과를 얻을 수 있음.

앞으로 더 간단하고 효율적으로 코드쓰는 방법을 생각해봐야겠다.
시행착오를 두려워하지 말장⭐

  • math module
    최대공약수 : math.gcd()
    최소공배수 : math.lcm()
profile
개발자국

0개의 댓글