[프로그래머스] 숫자 카드 나누기 / JavaScript / Level 2

KimYoungWoong·2022년 12월 3일
0

Programmers

목록 보기
35/60
post-thumbnail

🚩문제 주소


📄풀이

최대공약수 - 유클리드 호제법

유클리드 호제법을 이용해서 주어진 각 배열의 최대공약수를 따로 구합니다.
구한 최대공약수가 1이 나온다면 0으로 바꿔줍니다.

A배열을 every 함수를 이용하여 각 원소가 B의 최대공약수로 전부 안나눠진다면 정답과 최대공약수B 중에서 큰 값으로 정답을 갱신합니다.
B배열도 마찬가지로 진행합니다.

정답을 반환합니다.



👨‍💻코드

const gcd = (n1, n2) => {
  let remainder = n1 % n2;
  return n2 === 0 ? n1 : gcd(n2, remainder);
};

function solution(arrayA, arrayB) {
  var answer = 0;
  let [gcdA, gcdB] = [arrayA[0], arrayB[0]];
  for (let i = 1; i < arrayA.length; i++) {
    gcdA = gcd(gcdA, arrayA[i]);
    gcdB = gcd(gcdB, arrayB[i]);
  }
  if (gcdA === 1) gcdA = 0;
  if (gcdB === 1) gcdB = 0;

  if (arrayA.every((v) => v % gcdB !== 0)) answer = Math.max(answer, gcdB);
  if (arrayB.every((v) => v % gcdA !== 0)) answer = Math.max(answer, gcdA);

  return answer;
}

profile
블로그 이전했습니다!! https://highero.tistory.com

0개의 댓글