EunGyeongKim

[level 0]분수의 덧셈 본문

코딩테스트/programmers

[level 0]분수의 덧셈

EunGyeongKim 2022. 10. 10. 16:59

더 많은 코드 (https://github.com/EunGyeongKim/TIL)

 

GitHub - EunGyeongKim/TIL: Today I Learne

Today I Learne. Contribute to EunGyeongKim/TIL development by creating an account on GitHub.

github.com

문제 링크

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

1. 문제 설명

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


2. 제한사항

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


3. 입출력 예

denum1 num1 denum2 num2 result
1 2 3 4 [5, 4]
9 2 1 3 [29, 6]

4. 코드

#최대 공약수
def gcd(a,b):
    c = 0 
    while (b!=0):
        c = a%b
        a, b = b, c
    return a

def solution(denum1, num1, denum2, num2):
    answer = []

    # 분모 (최소공배수 구하기)
    num_lcm = (num1* num2) / gcd(num1, num2)
    # 분자 ( => 분자*(최소공배수 / 분모))
    num_denum = denum1 * (num_lcm / num1) + denum2 * (num_lcm / num2)

    # 두 분수 더한 후 나눌수 있는 수가 있는지 확인(최소 공배수 체크!)
    last = gcd(num_denum, num_lcm)

    # 만약 최소공배수가 2 이상일 때, 나눠주기
    if last > 1:
        num_denum = num_denum /last
        num_lcm = num_lcm / last

    # 정답 추가
    answer.append(num_denum)
    answer.append(num_lcm)

    return answer
Comments