본문 바로가기
Algorithm/Programmers

[Algorithm] 프로그래머스 - 분수의 덧셈

by 홍월이_ 2022. 12. 28.

시작하며...

모든 알고리즘 문제 풀이는 제가 직접 짜서 정답을 맞춘 결과만을 공유합니다.

마지막 'More Solution'은 다른 정답자들 풀이 중 생각지 못했던 부분들이나 좋게 느껴진 풀이법 몇개를 가져와서 공유하였습니다.

 

[Level 0] 분수의 덧셈

 

프로그래머스

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

programmers.co.kr

 

문제 설명

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


제한사항

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

입출력 예

입출력 예 설명

입출력 예 #1

  • 1 / 2 + 3 / 4 = 5 / 4입니다. 따라서 [5, 4]를 return 합니다.

입출력 예 #2

  • 9 / 2 + 1 / 3 = 29 / 6입니다. 따라서 [29, 6]을 return 합니다.

 

My Solution

def gcd(num1, num2):
    if (num2 % num1) == 0:
        return num1
    else:
        return gcd(num2, num1 % num2)
    
def solution(denum1, num1, denum2, num2):
    sum_denum = (denum1* num2) + (denum2 * num1)
    sum_num = num1 * num2
    gcd_num = gcd(sum_denum, sum_num)
    return [sum_denum/gcd_num, sum_num/gcd_num]

 

주어진 두 분수(분자 분모)를 더하고 그 값의 기약분수값을 리턴해야 하는 문제이다.

기약분수를 구하기 위해 최대공약수를 구하는 메서드를 이용하였다. 

최대공약수 메서드 gcd는 유클리디안 호제법을 이용하였으며 이전에 만들었던 메서드를 가져와서 사용하였다.

  • 기약분수를 구하는 함수 gcd 정의
  • 두 분모들을 곱하여 공통분모로 사용
  • 각 분자들에 다른 분모를 곱하여 통분하고 더하기
  • 더해진 분수 (sum_denum / sum_num) 의 분자 분모의 최대공약수를 구하여 나눠준다 -> 기약분수

 

댓글