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

박선영·2023년 10월 8일
0
post-thumbnail

Lv0_분수의 덧셈

📄Description

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

제한 조건

  • 0 <numer1, denom1, numer2, denom2 < 1,000

입출력 예시

numer1denom1numer2denom2result
1234[5, 4]
9213[29, 6]

입출력 예 설명

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

🤔생각 정리

  1. 분수의 합 계산 후 약분 해줘야겠네.
    -> math 모듈의 gcd(최대 공약수) 활용하면 되겠네
# 최소공배수
lcm = (a * b) // math.gcd(a, b)

💡Pseudo Code💡

1. d = denom1 * denom2
2. d에 맞춰서 분수 통분
3. 분수의 합 계산 n = numer1 + numer2, d = denom1 + denom2
4. 약분 - 분모와 분자의 최대공약수 찾기

🖥️코드화

def solution(numer1, denom1, numer2, denom2):
	# 분모 통분
    d = denom1 * denom2
    n = numer1*denom2 + numer2*denom1
    g = math.gcd(d, n) # 약분
            
    return [n//g, d//g]

📌코드 비교 및 감상

  1. fractions 모듈의 Fraction 클래스 활용
    Fraction을 사용하면 분모와 분자로 계산이 가능하다.
from fractions import Fraction

def solution(n1, d1, n2, d2):
	ans = Fraction(n1, d1) + Fraction(n2, d2)
    return [ans.numerator, ans.denominator]
profile
데이터를 만지는 사람

0개의 댓글