본문 바로가기
기초다지기/JS 코딩테스트

javaScript 정수 배열 최소공배수 구하기

by 김빵그 2023. 12. 12.

문제 

정수 배열이 주어질 때 정수의 최소 공배수 구하기

풀이 

function findGCD(a, b) {
  return b === 0 ? a : findGCD(b, a % b);
}

function findLCM(a, b) {
  return (a * b) / findGCD(a, b);
}

function solution(arr) {

  var lcm = arr[0];
  return arr.reduce((lcm, num) => findLCM(lcm, num), arr[0]);

  return lcm;
}
  • GCD (최대공약수)
  • LCM (최소공배수)
  • reduce 
    • lcm 누적된 값 초기값은 배열 첫번째 요소 arr[0]
    • num은 배열의 각 요소를 나타낸다 
    • 현재까지의 누적된 값 lcm과 배열의 각 요소 num의 최소공배수 계산

다른 풀이

function nlcm(num) {
 return num.reduce((a,b) => a*b / gcd(a,b))  
}

function gcd(a, b) {
  return a % b ? gcd(b, a%b) : b
}
  • num.reduce ... 
    • 최소 공배수 계산 
    • 각 단계에서 a,b는 배열의 연속된 두 요소를 나타낸다 
function solution(arr) {
    return arr.reduce((acc, cur) => {
        const recursive = (min, max) =>{
          return (min % max) === 0 ? max : recursive(max, min % max);
        }

        let max = 0;
        return acc*cur / recursive(acc,cur);
    });
}
  • recursive 
    • 최대공약수 계산 
  • reduce 
    • 함수 내부에서 각 요소에 대한 최소 공배수 계산, 결과가 다음 단계로 누적되지 않고 새로운 최소 공배수 갱신