문제 설명
두 수의 최소공배수(Least Common Multiple)란 입력된 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미합니다. 예를 들어 2와 7의 최소공배수는 14가 됩니다. 정의를 확장해서, n개의 수의 최소공배수는 n 개의 수들의 배수 중 공통이 되는 가장 작은 숫자가 됩니다. n개의 숫자를 담은 배열 arr이 입력되었을 때 이 수들의 최소공배수를 반환하는 함수, solution을 완성해 주세요.
제한사항
arr은 길이 1이상, 15이하인 배열입니다.
arr의 원소는 100 이하인 자연수입니다.
입출력 예
arr | result |
---|---|
[2,6,8,14] | 168 |
[1,2,3] | 6 |
나의 풀이
function gcd(a, b){
let r;
while(b !== 0){
r = a % b;
a = b;
b = r;
}
return a
}
function lcm(a, b){
return a * b / gcd(a, b)
}
function solution(arr) {
let n = arr[0];
for(let i = 1; i < arr.length; i++){
n = lcm(n, arr[i])
}
return n;
}
최대공약수 GCD(Greatest Common Divisor)는 2개의 자연수를 받아 최대공약수를 받기 위해 2부터 두 자연수 중 작은 자연수까지 모두 나누어보면서 가장 큰 공약수를 구할 수 있다.
하지만 다른 방법으로 유클리드 호제법이라는 방법이 있는데 이는 a와 b의 최대 공약수는 b와 a를 b로 나눈 나머지와의 최대공약수와 같다
라고 한다.
이것을 수식으로 나타내면
이렇게 된다.
또한, 최소공배수 LCM(Least Common Multiple)는 두 자연수의 곱 / 최대공약수
이 된다.
이를 사용하여 해결했다.