Python으로 분수 간단히 다루기



백준 1735번, 2609번, 2702번같이 단순히 분수끼리 계산이나 최대공약수를 구하는 문제는 머릿속으로는 간단히 해결되지만 소스코드로 구현하기에는 살짝 귀찮습니다.

fractions 모듈을 이용해 분수를 간단히 다룰 수 있습니다.

>>> import fractions
>>> fractions.Fraction(1, 2) #fractions.Fraction(분자, 분모)
Fraction(1, 2)
>>> fractions.Fraction(1/3) #fractions.Fraction(분자/분모)
Fraction(1, 3)
>>> fractions.Fraction('1/4') #fractions.Fraction('분자,분모')
Fraction(1, 4)
>>> fractions.Fraction('1.8') #fractions.Fraction('유리수')
Fraction(9, 5)
>>> fractions.Fraction(2,8) #알아서 기약분수로 변환
Fraction(1, 4)
>>> fractions.Fraction(5) #분자만 쓰면 분모는 1로 자동 입력
Fraction(5, 1)


간단하죠?ㅎㅎ

이러한 Fraction객체로 사칙연산도 가능합니다.

>>> import fractions
>>> a = fractions.Fraction(1, 2) #a = 1/2
>>> b = fractions.Fraction(2, 3) #b = 2/3
>>> a+b
Fraction(7, 6)
>>> a-b
Fraction(-1, 6)
>>> a*b
Fraction(1, 3)
>>> a/b
Fraction(3, 4)
>>> a+1
Fraction(3, 2)
>>> a*3
Fraction(3, 2)


역시 간단하죠?ㅎㅎ

분수를 Fraction객체로 다루는 것 까지는 좋은데 분자, 분모값을 따로 받아오고 싶을때는?

numerator, denominator 메소드를 이용하면 됩니다. (각각 분자, 분모라는 뜻)

>>> import fractions
>>> a = fractions.Fraction(13, 24)
>>> a.numerator #분자
13
>>> a.denominator #분모
24


역시 역시 간단하죠?ㅎㅎ

이번엔 최대공약수를 구해봅시다.

gcd 메소드를 이용합니다. (gcd: greatest common divisor, 최대공약수)

>>> import fractions
>>> fractions.gcd(10, 25) #10과 25의 최대공약수
5
>>> fractions.gcd(7, 9) #7과 9의 최대공약수
1


역시 역시 역시 간단하죠?ㅎㅎ


ㅂㅂ (_ _)>

H2
H3
H4
3 columns
2 columns
1 column
Join the conversation now