[프로그래머스/Javascript] N개의 최소공배수

알고리즘 - 최소공배수와 최대공약수 활용

Posted by Kyun2da on June 27, 2020

1️⃣서론

프로그래머스 level2 문제 N개의 최소공배수입니다. Javascript를 이용하여 해결하였습니다.

2️⃣문제 설명

유클리디안 알고리즘

3️⃣풀이

이 문제는 N개의 최소공배수를 구하는 문제입니다. N개의 수(1,2, … , N) 가 있다고 가정하였을 때, 먼저 1번째 수와 2번째 수의 최소공배수를 구하고, 구한 최소공배수와 3번째 수의 최소공배수를 구합니다. 이런식으로 N개까지 최소공배수를 구하면 그 수가 N개의 공통 최소공배수가 됩니다.

그렇다면 최소공배수는 어떻게 구해야하는가? 에 대한 답은 바로 유클리드 호제법 을 이용하는 것입니다.

유클리드 호제법은 최대공약수를 구하는 알고리즘 중의 하나입니다. 따라서 유클리드 호제법을 이용하여 최대공약수를 구하고 최소공배수는 두수의 곱 / 최대공약수 이므로 이를 이용하여 문제를 해결할 수 있습니다.

4️⃣ 소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//최대공약수 구하기
const gcd = (a, b) => {
  while (b > 0) {
    let temp = b;
    b = a % b;
    a = temp;
  }
  return a;
};

//최소공배수 구하기
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;
};

5️⃣ 결론

이 문제는 유클리드 호제법만 알고 있다면 그리 어려운 문제는 아니었습니다. javascript만의 특별한 문법도 요구 되지않아서 어렵지 않게 해결할 수 있었습니다.

6️⃣ 마치며..

질문과 지적은 환영합니다. 이 문제는 최적의 정답일 수도 아닐수도 있습니다.
궁금한게 있으시면 아래 댓글 남겨주세요.🙏
댓글은 저에게 큰 힘이 됩니다!
감사합니다. ❤️