코딩 테스트/알고리즘 공부

최소공배수(lcm)

fullfish 2022. 9. 5. 04:07

기본 방법

function solution(arr) {
  let answer = 0;
  let i = Math.max(...arr);
  while (true) {
    if (arr.every((ele) => i % ele === 0)) {
      answer = i;
      break;
    }
    i++;
  }
  return answer;
}

최소공배수는 각 요소로 나누었을때 나머지가 0인점을 이용해서 

i를 1씩 늘려나가면서 모든 요소가 나눌때 나머지 0 인 i를 구함

i는 최소한 arr의 요소중 제일 큰 값 이상

 

더 빠른 방법

function lcm(arr) {
  return arr.reduce((a, b) => (a * b) / gcd(a, b));
}

function gcd(a, b) {
  return a % b ? gcd(b, a % b) : b;
}

// arr가 아니고 2개의 수만 주어졌다면
function lcm(a, b) {
  return (a * b) / gcd(a, b);
}

기본 성질을 이용해서 푸는 방법

예를 들어 12와 30의

최대공약수는 6이고

최소공배수는 60이다

6을 구하기위해선 소인수 분해한것중 and부분을

60을 구하기위해선 or부분을 곱하면된다

그러므로 각 인자를 곱한후 최대공약수를 나누면 최소공배수가 된다

'코딩 테스트 > 알고리즘 공부' 카테고리의 다른 글

수학적 지식 모음  (0) 2022.09.08
약수 구하기  (0) 2022.09.05
병합 정렬 (Merge Sort)  (0) 2022.06.17
셸 정렬 (Shell Sort)  (0) 2022.06.16
삽입 정렬 (Insertion Sort)  (0) 2022.06.14