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

이유정·2023년 6월 1일
0
post-thumbnail

문제 설명

두 수의 최소공배수(Least Common Multiple)란 입력된 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미합니다. 예를 들어 2와 7의 최소공배수는 14가 됩니다. 정의를 확장해서, n개의 수의 최소공배수는 n 개의 수들의 배수 중 공통이 되는 가장 작은 숫자가 됩니다. n개의 숫자를 담은 배열 arr이 입력되었을 때 이 수들의 최소공배수를 반환하는 함수, solution을 완성해 주세요.

제한 사항

arr은 길이 1이상, 15이하인 배열입니다.
arr의 원소는 100 이하인 자연수입니다.

입출력 예

나의 문제 풀이 코드

function maxP(a,b){ //최대공약수 구하는 함수
    let answer = 1; 
    for(let i=2; i<=a; i++){ //a가 b보다 작으니, a까지만 확인하면 된다. 
        if(a%i === 0 && b%i===0) answer = i
      //a랑 b모두 나눠지는 수가 최대공약수가 된다. 
    }
    return answer; 
}
function solution(arr) { //배열 안 모든 수의 최소공배수 구하는 함수
    let answer = arr[0]; 
    arr.sort((a,b)=> a-b) // 오름차순 정렬
   for(let i=1; i<arr.length; i++){
       let share = maxP(answer, arr[i]); // 앞 두 수로 최대공약수를 구한다. 
      answer = parseInt(answer/share) * parseInt(arr[i]/share) * share;
     //최소공배수는 두 수를 최대공약수로 나눈 몫 두개와 최대공약수를 곱한 수가 된다. 
   }
    return answer; 
}

나의 코드 설명

기억하고 갈 것

최대공약수랑, 최소공배수 구하는건 간단하게 공식처럼 암기하자

function gcd(a,b){ //최대공약수 구하는 법
	return a%b ? gcd(b, a%b): b 
}
function nlcm(arr){ //배열 안 최소공배수 구하는 법
  return arr.reduce((a,b)=> a*b / gcd(a,b))
}
profile
팀에 기여하고, 개발자 생태계에 기여하는 엔지니어로

0개의 댓글