숫자 카드 나누기

Lv. 2

Solution

export function divideCard(arrayA: number[], arrayB: number[]): number {
  const gcd = (a: number, b: number): number => (a % b === 0 ? b : gcd(b, a % b));
 
  const lcm = (a: number, b: number): number => (a * b) / gcd(a, b);
 
  const gcdA = arrayA.reduce(gcd, arrayA[0]);
  const gcdB = arrayB.reduce(gcd, arrayB[0]);
  const lcmA = arrayA.reduce(lcm, arrayA[0]);
  const lcmB = arrayB.reduce(lcm, arrayB[0]);
 
  for (let i = Math.max(gcdA, gcdB); 1 < i; i--) {
    if ((gcdA % i === 0 && lcmB % i !== 0) || (gcdB % i === 0 && lcmA % i !== 0)) {
      return i;
    }
  }
 
  return 0;
}