[프로그래머스/파이썬] 레벨 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이 되는 문제는 제외시켜도 괜찮다.
하지만 코드를 짜놓고도 뭔가 찜찜하다.
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/파이썬] 레벨 0 짝수의 합 (0) | 2022.10.12 |
---|---|
[프로그래머스/파이썬] 레벨 0 배열 두배 만들기 (0) | 2022.10.12 |
[프로그래머스/파이썬] 레벨 0 몫 구하기 (0) | 2022.10.12 |
[프로그래머스/파이썬] 레벨 0 두수의 곱 (0) | 2022.10.12 |
[프로그래머스/파이썬] 레벨 1 윤년인 해의 날짜 요일 구하기 (0) | 2022.10.11 |