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

Hwang Won Tae·2023년 4월 23일
0

Algorithm & Coding-Test

목록 보기
24/53
post-thumbnail

📢문제 설명

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

🚨제한사항

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

🧾입출력 예

arrresult
[2,6,8,14]168
[1,2,3]6

🔑풀이

function solution(arr) {
  // 내림차순 정렬
  arr.sort((a, b) => b - a);

  let lcm = arr[0]; // 가장 큰 arr[0]로 설정

  for (let i = 1; i < arr.length; i++) {
    let r = 0;
    let m = lcm; // 큰 값
    let n = arr[i]; // 작은 값

    // n이 0이 될 때까지 반복
    while (n) {
      r = m % n;
      m = n;
      n = r;
    }

    lcm = (lcm * arr[i]) / m; // 최소공배수 갱신
  }

  return lcm;
}

// 배웠던 다른사람의 풀이
// reduce()를 활용한 깔끔한 방식

function solution(arr) {
  let r, m, n = 0;
  return arr.sort((a, b) => b - a).reduce((acc, cur) => {
      m = acc;
      n = cur;
      while (0 < n) {
        r = m % n;
        m = n;
        n = r;
      }
      return (acc * cur) / m;
    });
}
profile
For me better than yesterday

0개의 댓글