Level 2 ) N개의 최소공배수

Doozuu·2023년 3월 26일
0

프로그래머스 (JS)

목록 보기
100/183

문제 설명

두 수의 최소공배수(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

풀이

최대공약수, 최소공배수와 관련해 다음과 같은 공식이 있다.

두 수의 곱 = 최대공약수 * 최소공배수

이를 최소공배수에 대해 정리하면 다음과 같은 식을 얻을 수 있다.

최소공배수 = 두 수의 곱 / 최대공약수


유클리드 호제법으로 최대공약수 알고리즘을 구하는 방법은 다음과 같다.

  1. 두 수 a,b가 있을 때, a가 b로 나누어 떨어지면 최대공약수는 b가 된다.
  2. a가 b로 나누어 떨어지지 않을 경우, b와 a를 b로 나눈 나머지를 다시 나누고, 나누어 떨어질 때까지 시행을 반복한다.

ex. 8과 14의 최대공약수

8 % 14 = 8
14 % 8 = 6
8 % 6 = 2
6 % 2 = 0 
=> 최대공약수 : 2

두 수가 아닌 n개의 수의 최소공배수는 배열에 있는 값을 2개씩 묶어서 최소공배수를 구하는 과정을 반복해주면 구할 수 있다.

function solution(arr) {
    function fnGCD(a,b){
        return (a%b) ? fnGCD(b,a%b) : b;
    }
    return arr.reduce((acc,cur) => acc * cur / fnGCD(acc, cur));
}
profile
모든게 새롭고 재밌는 프론트엔드 새싹

0개의 댓글