지난 포스팅에서는 파이썬 표준 라이브러리 중 time 에 대해서 살펴보았습니다.
이번 포스팅에서는 파이썬 표준 라이브러리 중 math.gcd 와 math.lcm 에 대해 공부해 보도록 하겠습니다.
- 68. 파이썬 time 표준 라이브러리
- 67. 파이썬 표준 라이브러리 datetime.date
- 66. 파이썬 내장 함수 round sorted str sum tuple type zip
파이썬 표준 라이브러리
math.gcd
math.gcd 함수는 최대 공약수(gcd, greatest common divisor)를 쉽게 구해주는 함수 입니다.
math.gcd 함수는 파이썬 3.5 버전이상부터 사용할 수가 있습니다.
최대 공약수 에 대해 예전에는 알았지만 까먹은 분들을 위해 간단히 설명드리면
먼저 공약수(common divisor)는 두 수 이상의 여러 수의 공통 된 약수를 의미하게 됩니다.
예를 들면 30 과 15 는 공통으로 1, 3, 5, 15 라는 약수를 가지고 있습니다.
이것을 공약수라고 합니다.
이 공약수 중에서 가장 큰 공약수를 최대 공약수라고 합니다.
30 과 15 의 최대 공약수는 15가 됩니다.
다음 문제를 한 번 보겠습니다.
어린이집에서 사탕 60 개, 초콜렛 100 개, 젤리 80 개를 준비를 했습니다.
공평하게 모든 어린이들이 나누어 가지도록 봉지에 담아 나누어야 한다면 최대 몇 봉지까지 만들 수가 있을까요?
단, 사탕, 초콜렛, 젤리는 남기지 않고 모두 담도록 합니다.
이 문제는 60, 100, 80 의 최대 공약수를 구하면 바로 해결이 됩니다.
즉, 똑같이 나눌 수 있는 봉지 개수가 최대가 되는 수를 구하면 됩니다.
>>> import math
>>> math.gcd(60, 100, 80)
20
>>>
파이썬의 버전이 3.9 이상이라면 math.gcd 의 인수로 위 처럼 여러개가 가능합니다.
하지만 3.9 버전 미만이라면 2 개 까지만 가능합니다.
위처럼 최대 공약수를 math.gcd 함수를 이용해서 구해보았습니다.
결론적으로 최대 20 봉지를 만들 수 있게 되고
각 봉지에 들어가는 사탕 과 초콜렛, 젤리의 갯수는 전체 개수를 20 으로 나누어서 구할 수가 있습니다.
>>> 60 / 20, 100 / 20, 80 / 20
(3.0, 5.0, 4.0)
>>>
이렇게 한 봉지당 사탕 3 개, 초콜렛 5 개, 젤리 4 개씩 담으면 해결이 됩니다.
math.lcm
math.lcm 함수는 math.gcd 와는 반대 개념으로 최소 공배수를(lcm, least common multiple) 구할 때 사용되는 함수 입니다.
math.lcm 함수는 파이썬 3.9 버전부터 사용이 가능합니다.
최소 공배수에 대해서도 간략히 말씀 드리면 최대 공약수와는 반대로 두 개의 수의 공통된 배수 중 가장 작은 수를 의미 합니다.
예를 들면 3 과 5 의 최소 공배수는 15 가 됩니다.
예를 들어 버스 정류장에서 시내 버스는 15분 마다 도착을 하고 마을 버스는 25분 마다 도착을 한다고 했을 때, 오후 1시가 됐을 때 두 버스가 동시에 도착 한다고 하면 다음에 두 버스가 동시에 도착 할 시각을 알기 위해서는 어떻게 해야 할까요?
위 문제는 15 와 25 의 공통 배수 중 가장 작은 수, 즉 최소 공배수를 구하면 해결이 됩니다.
>>> import math
>>> math.lcm(15, 25)
75
>>>
위 코드처럼 math.lcm 함수를 이용해서 15 와 25 의 최소 공배수 75 를 구했습니다.
오후 1시에 두 버스가 동시에 도착했다고 했었으니 다음에 동시에 도착할 시각은 75분 후가 되는 것입니다.
1시의 75분 후는 2시 15분이 되겠네요
이렇게 표준 라이브러리 math 의 최대 공약수와 최소 공배수를 구하는 math.gcd 와 math.lcm 함수에 대해 알아보았습니다.
math 라이브러리나 이전에 공부했던 time 라이브러리에는 상당히 많은 함수들이 존재합니다.
이번에 공부한 math.gcd 와 math.lcm 은 그 중 극히 일부분만 본 것임을 알고 계시기 바랍니다.
- 이 포스팅은 ‘위키독스’ 의 ‘점프 투 파이썬‘ 전자책을 구매하여 독학하기 위한 자료로 작성했습니다.
