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

2023. 2. 20. 22:30Algorithm

function solution(arr) {
  var answer = 1;
  let yaklist = [];
  let yakjoin = [];
  arr.forEach((num) => {
    let newnum = num;
    let yak = [];
    var icopy = 0;
    // 약수를 구하는 코드
    while (icopy !== 1 && newnum !== 1) {
      for (i = 2; i <= newnum; i++) {
        if (Number.isInteger(newnum / i)) {
          yak.push(i);
          icopy = i;
          newnum /= i;
          break;
        }
      }
    }
    yakjoin = yakjoin.concat(yak);
    yaklist.push(yak);
  });
  
  // 약수를 Set로 변환하여 중복값제거한 내역 뽑기
  let sets = new Set(yakjoin);
  
  // 각 내역을 가장 많이 갖고 있는 수 찾기
  sets.forEach((nums) => {
    let max = 1;
    yaklist.forEach((list) => {
      let listnum = list.filter((element) => nums === element).length;
      max = max > listnum ? max : listnum;
    });
    answer *= nums ** max;
  });
  return answer;
}

세 개 이상의 정수의 최소공배수를 구하는 방법을 알았더라면 .. !!!!!!
훨씬 쉽게 풀 수 있다~!
원리는 간단하다! 앞에서부터 두 개씩 비교하여 최소공배수를 구해나가는 것!
재귀를 이용하면 쉽게 해결할 수 있다!