fullfish 2022. 9. 5. 03:31

아이디어

최소공배수를 구하면 된다.

주어진 값들중 제일 큰 값이상일 것이며

최소공배수에 주어진 값들을 나눴을때 모두 나머지가 0이어야한다

 

알고있었는데 딱히 써본적없는 arr.every를 썼다 (some도 있음)

 

코드

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;
}

 

다른 사람의 좋은 코드

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

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

응축해가면서 품

temp = 첫 두 요소의 곱 / 첫 두 요소의 최대공약수

temp = temp * 3번째 요소 / gcd(temp,3번째 요소)

...

이런식으로 품