본문 바로가기
알고리즘/프로그래머스

[프로그래머스/파이썬] 레벨 0 분수의 덧셈

by Renechoi 2022. 10. 12.

[프로그래머스/파이썬] 레벨 0 분수의 덧셈

 

📌 문제 

첫 번째 분수의 분자와 분모를 뜻하는 
denum1

num1
, 두 번째 분수의 분자와 분모를 뜻하는 
denum2

num2
가 매개변수로 주어집니다. 두 분수를 더한 값을 기약 분수로 나타냈을 때 분자와 분모를 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요.

 

⚔ 제한 사항

0 <denum1, num1, denum2, num2 < 1,000

 

 

📣 입출력 예

 

 

denum1num1denum2num2result

1 2 3 4 [5, 4]
9 2 1 3 [29, 6]

 

 

 

🔑 입출력 예 설명 

 

입출력 예 #1
1 / 2 + 3 / 4 = 5 / 4입니다. 따라서 [5, 4]를 return 합니다.
입출력 예 #2
9 / 2 + 1 / 3 = 29 / 6입니다. 따라서 [29, 6]을 return 합니다.

 

 

 


 

💡 나의 풀이

 

 

def getGcf(top,bottom):                           # 기약분수 구하기
    gcd = getGcd(top,bottom)
    top = top / gcd
    bottom = bottom / gcd 
    
    gcf = {"denominator" : top ,"numerator" :bottom}
    return gcf

    
def getGcd(top,bottom):                           # 최대 공약수 구하기
    gcd = 0
    
    for i in range(1, top+1):
       if top % i == 0 and bottom % i ==0:
         gcd = i
    
    return gcd 


def solution(denum1, num1, denum2, num2):
    
    # 먼저 분모 분수를 최대치로 맞춰준다 = 분모의 곱을 먼저 해서 공통 분모에서 더해주는 꼴로 
    isMultiplied_numertor = num1*num2
    isAdded_denominator = denum1*num2 + denum2*num1     #반대편으로 곱해주면 되므로

    gcf = getGcf(isAdded_denominator, isMultiplied_numertor)
    
    denominator = gcf["denominator"]
    numerator = gcf["numerator"]
    
    answer = [denominator, numerator]
    return answer

 

 

 


 

👀 다른 사람의 풀이 

#분모가 같을경우 = denum1+denum2/ num1(num2)   # 분자 / 분모
#분모가 다를경우 = (denum1 * num2) + (denum2 * num1) / num1*num2 #분자 / 분모

# 최초풀이
def solution(denum1, num1, denum2, num2):
    answer = [] 
    if num1 == num2:
        answer = [denum1+denum2, num1]
        return answer

    elif num1 < num2 and num2%num1 == 0:
        num1, num2 = num2, num1
        a = num2 / num1
        answer = [(denum1 * a) + denum2, num2]
        return answer

    else:
        answer = [(denum1 * num2) + (denum2 * num1), num1*num2]


# 분모가 다른 분수의 계산을 편하게 해주는 함수     
from fractions import Fraction

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

 

 

 

 


 

✨ 코멘트 

 

 

일부러 Fractions나 Math 모듈을 임포트해서 가져오는 것이 아니라 직접 계산 로직을 구현하는 방식으로 코딩을 하려고 했다.

 

이 문제에서 해결해야 하는 부분은 

 

최대공약수를 구해야하는 문제 

기약분수로 변환해야 하는 문제 

 

부분이 아닐까 싶은데 그부분을 별도 함수로 만들어 처리해주는 과정이 필요하다. 

 

문제의 제약 조건에서 0을 제외시켰기 때문에 분모가 0이 되는 문제는 제외시켜도 괜찮다. 

 

하지만 코드를 짜놓고도 뭔가 찜찜하다. 

 

 

 

 


반응형