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

Kyoungmoon Kim·2022년 11월 15일
0

문제설명

https://school.programmers.co.kr/learn/courses/30/lessons/12953

문제풀이

  1. 각각의 숫자를 소인수 분해 후 배열에 담는다
  2. 중복되는 소인수 제거
  3. 중복 제거된 소인수 모두 곱한다.

풀이코드

function solution(arr) {
  let answer = 1;
  let totalArr = [];
  for (let i = 0; i < arr.length; i++) {
    let n = arr[i];
    let divideArr = [];
    // 2로 나눠지면 계속 나누기
    while (n % 2 === 0) {
      divideArr.push(2);
      n /= 2;
    }
    // 3부터 루트n까지 나눌 수 있으면 나누기
    // 이제 n은 홀수 -> 이미 2의 배수를 판별했기때문에 2씩 증가시킬 수 있음
    for (let i = 3; i * i <= n; i += 2) {
      while (n % i === 0) {
        divideArr.push(i);
        n /= i;
      }
    }

    // 루트n부터 n까지 소수인 경우 처리
    if (n > 2) divideArr.push(n);
    for (let i = 0; i < totalArr.length; i++) {
      for (let j = 0; j < totalArr[i].length; j++) {
        const findIndex = divideArr.indexOf(totalArr[i][j]);
        if (findIndex > -1) {
          divideArr.splice(findIndex, 1);
        }
      }
    }
    for (let i = 0; i < divideArr.length; i++) {
      answer *= divideArr[i];
    }
    totalArr.push(divideArr);
  }

  return answer;
}
profile
프론트 개발 공부를 정리한 블로그입니다.

0개의 댓글