728x90
문제설명
https://school.programmers.co.kr/learn/courses/30/lessons/120808
내 코드
from fractions import Fraction
def solution(numer1, denom1, numer2, denom2):
f = Fraction(numer1, denom1) + Fraction(numer2, denom2)
# 분자 / 분모
answer = [f.numerator, f.denominator]
return answer
어떻게 푸는지 잘 모르겠어서 검색을 통해 푼 풀이였다.
뭔가 파이썬 내에 분수를 다룰 수 있는 라이브러리가 있어서 찾아봤는데,
fractions이라는 라이브러리가 있는 것을 찾게 되었다!
fractions 은 기본 내장 라이브러리로, 이 안에 Fraction 함수로 분자와 분모를 입력하면 분수 형태로 입력이 가능하다!
자세한 내용은 아래 글에 정리했다.
2024.02.22 - [PYTHON] - [PYTHON] 분수 표현, 사칙연산 - Fraction
아무튼 풀이 과정!
Fraction 함수를 활용해 분자(numer1)와 분모(denom1)을 제공하여 분수를 만들고, 2개의 분수를 계산한다.
이 때, 값은 자동으로 기약분수 형태로 나오게 된다!
도출된 기약분수의 분자(numerator)와 분모(denominator)을 리스트 형식으로 반환한다.
numer1 = 9
denom1 = 2
numer2 = 1
denom2 = 3
print(Fraction(numer1, denom1)
# 9/2
print(Fraction(numer2, denom2)
# 1/3
print(Fraction(numer1, denom1) + Fraction(numer2, denom2))
# 29/6
print(numer1/denom1 + numer2/denom2)
# 4.833333333333333
다른 사람 풀이
[코드 1]
import math
def solution(numer1, denom1, numer2, denom2):
# 분자
numer = denom1 * numer2 + denom2 * numer1
# 분모
denom = denom1 * denom2
# 최대공약수 구하기
gcd = math.gcd(denom, numer)
# 분자 / 분모
return [numer//gcd, denom//gcd]
-> 분수의 합을 더하는 방법이다.
분수의 합을 구한 후,
분자와 분모의 최대공약수를 구해 그 값으로 나눠준다!
** math.gcd(숫자, 숫자) => 두 수의 최대 공약수를 구하는 함수
[코드2]
def solution(numer1, denom1, numer2, denom2):
# 분자
numer = denom1 * numer2 + denom2 * numer1
# 분모
denom = denom1 * denom2
#최대공약수 구하기
result=[]
for i in range(numer, 0, -1): #range(시작값, 끝값, 증가치)
if numer % i == 0 and denom % i == 0:
d=i
break
result.append(a/d)
result.append(b/d)
-> 위와 비슷하지만 라이브러리를 사용하지 않는 코드!
파이썬 라이브러리를 사용하면 매우 간편하게 풀 수 있지만, 실제 코딩테스트에서 내가 기억해서 써먹을 수 있을지는 의문다. 너무 어려운게 많은듯하다.
끝-
728x90
'코딩테스트 > PYTHON' 카테고리의 다른 글
[프로그래머스][PYTHON] Lv. 0 최빈값 구하기 (0) | 2024.02.23 |
---|---|
[프로그래머스][PYTHON] Lv. 0 중앙값 구하기 (0) | 2024.02.22 |
[프로그래머스][PYTHON] Lv. 0 정수를 나선형으로 배치하기 (0) | 2024.02.19 |
[프로그래머스][PYTHON] Lv. 0 그림 확대 (0) | 2024.02.18 |
[프로그래머스][PYTHON] Lv. 0 정사각형으로 만들기 (0) | 2024.02.18 |