백준 코드 16430번 문제에서 '서로소'와 '기약 분수'가 나왔다.
예를 들어, 숫자 3과 5가 있을 때 각각의 공약수는 1, 3과 1, 5이다. 이 두 수의 최대공약수는 1이다. 이때 이 두 수의 관계를 '서로소'라 한다.
기약 분수는 1/2, 3/5와 같이 분자와 분모의 공약수가 1 뿐이어서 더 이상 약분할 수 없는 상태의 분수를 말한다.
만약 분수 2/4가 있을 때 이 수의 기약분수는 1/2이다.
파이썬의 math 모듈에는 gcd 함수가 있다. 주어진 두 숫자의 최대공약수를 구한다.
>>>gcd(4, 10) 2
나는 서로소를 이 함수로 검사했다.
while True: A, B = map(int, input().split()) if gcd(A, B) != 1: print("A, B는 서로소여야 합니다.") continue elif A < 1 or B < 1 or A > 10 or B > 10: print("A, B는 1에서 9까지의 숫자 중 하나여야 합니다.") continue else: break
그리고 1 - (A / B)의 계산이 소수점으로 나오지 않고 분수로 출력되도록 Fraction으로 분수를 생성했다. 숫자 A와 B는 이미 서로소이므로 더 이상 약분할 필요가 없지만, 만약 서로소가 아닐 경우에도 Fraction 함수로 인해 자동으로 기약 분수로 약분되어 출력한다. 이후 분자와 분모를 따로 출력하기 위해 numerator 프로퍼티(분자)와 denominator 프로퍼티(분모)를 사용했다.
remain = 1 - Fraction(A, B) print(remain.numerator, remain.denominator)
백준 코드에서 여러 문제들을 풀어보니 모르는 것들을 많이 알게 된다. 또, 검색을 통해 모르는 것을 아는 것으로 만들 수 있게 되었다. 전에는 인터넷에서 방법을 검색해도 그 말을 이해하지 못해서 해결을 못했는데, 조금씩 익숙해지니 이해가 빨라진다.
'문과의 파이썬 공부' 카테고리의 다른 글
파이썬의 이스터에그 (0) | 2020.11.12 |
---|---|
python으로 날짜와 시간 다루기 : UTC와 KST (0) | 2020.11.04 |
여러 줄을 한 번에 입력받고 싶을 때 : sys.stdin.readlines()와 공백 제거 : strip() (0) | 2020.11.04 |
객체 지향 언어 파이썬, 클래스와 객체의 관계는 붕어빵 틀과 붕어빵이다? (0) | 2020.11.01 |