문제설명
https://school.programmers.co.kr/learn/courses/30/lessons/120808
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
내 코드
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
[PYTHON] 분수 표현, 사칙연산 - Fraction
Fractions 파이썬의 Fractions 모듈은 분수 계산을 위한 라이브러리이다. 이 모듈은 분수의 기본 연산 (덧셈, 뺄셈, 곱셈, 나눗셈 등)을 지원하며, 실수와 분수의 혼합 계산도 가능하다. "Fractions" 모듈
yeonnys.tistory.com
아무튼 풀이 과정!
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)
-> 위와 비슷하지만 라이브러리를 사용하지 않는 코드!
파이썬 라이브러리를 사용하면 매우 간편하게 풀 수 있지만, 실제 코딩테스트에서 내가 기억해서 써먹을 수 있을지는 의문다. 너무 어려운게 많은듯하다.
끝-
'코딩테스트 > 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 |