[프로그래머스] 레벨2 (level2) N개의 최소공배수

2020년 05월 21일, 11:10

N개의 최소공배수

문제설명

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

  • arr은 길이 1이상, 15이하인 배열입니다.
  • arr의 원소는 100 이하인 자연수입니다. 입출력 예
arr result
[2,6,8,14] 168
[1,2,3] 6

문제풀이

항상 최소공배수, 최대공약수, 소수 등이 나오는 문제들은 겁먹게 된다..
이번 문제도 어떻게 풀어야하나.. 고민을 많이 했다.
다른 사람의 풀이를 보니 나같인 푼사람은 없었다.. 보통 재귀함수를 이용해서 푸신 분들이 많았다.

나는 주어진 숫자 배열을 정렬한 뒤 최댓값의 배수가 무조건 최대공배수이니까 이 생각으로 문제를 풀었다.
그래서 최댓값을 구하고, 최댓값의 배수를 최댓값을 제외한 나머지 값들로 나눠서 나머지가 0일 경우를 찾았다.

function solution(arr) {
  var answer = 0;
  let isFind = false;
  let i = 1;
  // arr.sort((a,b) => a-b)
  let max = arr.splice(arr.length - 1, 1);
  while (!isFind) {
    isFind = arr.every(e => (max * i) % e === 0);
    i++;
  }
  answer = max * (i - 1);
  return answer;
}

아 근데 혹시 몰라서 sort를 빼봤는데도 돌아가는거 보면, 정렬된 배열을 주는 것 같다.

아쉬운 점 || 느낀 점

재귀함수로도 한 번 나중에 풀어봐야겠다.