<aside> 💡
지금까지 기초 문제를 풀 때는 어떻게 문제를 풀어야 하는지 고민해보고, 직접 작성해봤다.
확실히 직접 작성해보고, 검색해서 함수, 메서드를 알아보는 것은 좋은 경험이다. 그러나 이제 입문 문제부터는 import를 적극적으로 활용해야 하는 것 같다.
이번 문제 또한 최소공배수를 구할 수 있다면 빠르게 해결할 수 있는 문제다. 때문에 AI 검색을 통해 사용방법을 빠르게 숙지하고 경험을 쌓자.
</aside>
LCM
(최소 공배수) & GCD
(최대 공약수) 정리import math
# 3.9 버전 아래라 lcm 함수를 직접 정의
def lcm(a, b):
return a * b // math.gcd(a, b)
# 1 매개변수를 이용하여 lcm함수를 호출!
# 2 lcm(6, 6) -> 36 // gcd 즉 최대공약수 6과 6의 gcd는 6!ㅡ -> 36/6 이 되므로 6을 리턴함
# 3 결과적으로 6이 lcm 즉 최소 공배수가 되는 것!
def solution(n):
return lcm(6, n) // 6
# 5 이제 반환된 6 // 6 으로 1이 결과가 되는 것!
<aside> 💡
math를 추가하고
gcd는 사용 가능하므로 최대 공배수를 구한다!
최대 공배수란 두 수가 주어질때 각 수의 약수중 공통 약수중 최대 값을 구하는 것!
gcd 최대 공약수 예
이후 6*6 // 6 이 되므로 결과적으로 lcm 즉 최소 공배수가 6이 된다. 이후 6 // 6 을 다시 결과로 반환하면 result를 구할 수 있다.
lcm 최소 공배수 예
→ 최소 공배수 = 두 수의 곱 / 최대 공약
</aside>두 수 a, b
에 대해 다음 식이 항상 성립합니다:
a * b = gcd(a, b) * lcm(a, b)
따라서
lcm(a, b) = |a * b| // gcd(a, b)
(절댓값 | |
는 음수 처리 안전을 위해 사용합니다.)
이유(간단히):
a와 b를 gcd로 나누면 서로소(공약수가 1인) 두 수가 되고, 그들의 곱에 gcd를 곱하면 공배수의 최소가 됩니다 — 직관적으로는 소인수별로 최대 지수를 취하는 것과 같습니다.