N개의 최소공배수 구하기

GonnabeAlright·2022년 5월 1일
0
post-thumbnail
post-custom-banner

최소공배수 = 두 수의 곱 / 최대 공약수 공식을 이용하여 인수로 전달받은 N개의 수들의 최소공배수를 구합니다. 최대 공약수는 유클리드 호제법을 이용합니다.

const gcd = (a, b) => {
  while (b > 0) {
    let temp = b;
    b = a % b;
    a = temp;
  }
  return a;
}

2개의 자연수 a,b에 대해서 ab로 나눈 나머지를 r이라 하면 a와 b의 최대공약수는 b와 r의 최대 공약수와 같다.

const lcm = (a, b) => {
  return (a * b) / gcd(a, b);
}

최소공배수를 구하는 공식은 두 수를 곱한 값을 두 수의 최대공약수로 나눈 값과 같다.

const solution = arr => {
  let answer = 1;
  for (let i = 0; i < arr.length; i++) {
    answer = lcm(answer, arr[i]);
  }
  return answer;
}

인수로 전달받은 배열을 반복문으로 순회하면서 lcm의 첫 번째 매개변수로 누적된 최소공배수를 전달하고 두 번째 매개변수에는 배열의 요소를 차례로 전달합니다. 배열을 모두 순회하였을 때 배열 요소들의 최소공배수가 answer에 담기게 됩니다.

post-custom-banner

0개의 댓글