문제 설명
첫 번째 분수의 분자와 분모를 뜻하는 numer1, denom1, 두 번째 분수의 분자와 분모를 뜻하는 numer2, denom2가 매개변수로 주어집니다. 두 분수를 더한 값을 기약 분수로 나타냈을 때 분자와 분모를 순서대로 담은 배열을 return 하도록 solution 함수를 완성해 보세요.
제한사항
- 0 <numer1, denom1, numer2, denom2 < 1,000
입출력 예
| numer1 | denom1 | numer2 | denom2 | result |
| 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 합니다.
나의 풀이
문제를 보고 처음에 math.lcm() 함수를 이용해서 풀려고 했었다.
하지만 에러가 발생했고 찾아보니 Python 3.9 이전 버전에서는 math.lcm 함수를 사용할 수 없다고 한다.
그래서 직접 함수 lcm() 함수를 만들어 보았다.
def solution(numer1, denom1, numer2, denom2):
common_denom = lcm(denom1, denom2)
numer = numer1 * (common_denom // denom1) + numer2 * (common_denom // denom2)
gcd = math.gcd(numer, common_denom)
numer //= gcd
common_denom //= gcd
return [numer, common_denom]
def lcm(a, b):
return abs(a*b) // math.gcd(a, b)
참고할만한 풀이
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]
훨씬 더 직관적이다.
from fractions import Fraction
def solution(denum1, num1, denum2, num2):
answer = Fraction(denum1, num1) + Fraction(denum2, num2)
return [answer.numerator, answer.denominator]
'fractions' 모듈은 부동 소수점 숫자를 분수로 변환하고 분수에 대한 산술 연산을 수행하는 등 분수 작업을 위한 다양한 방법을 제공한다.
그리고 answer.numerator를 이용하면 분자값에 액세스 할 수 있고, answer.denominator를 이용하면 분자값에 액세스 할 수 있다.분수 문제에는 Fraction 클래스를 사용하는 게 좋을 것 같다.
역시 파이썬은 편리한 라이브러리가 많은 것 같다.
'Algorithm > 프로그래머스' 카테고리의 다른 글
| [Programmers] 수 조작하기 2 (0) | 2023.09.05 |
|---|---|
| [Programmers] 최빈값 구하기 () (0) | 2023.03.18 |