Level 2️⃣ - 숫자카드 나누기

2024. 4. 23. 16:52알고리즘/프로그래머스

https://school.programmers.co.kr/learn/courses/30/lessons/135807

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제는 어렵지 않으나 유클리지 호제법을 구현한 코드만 외우고 있어서 간단한 예시와 함께 정리해보려고 한다.

 

🛠코드

그리고 gcd 함수는 두 수 사이의 최대공약수만 구할 수 있는 줄 알았는데 여러 수들의 최대공약수도 구할 수 있음을 배웠다.

function solution(arrayA, arrayB) {
    let ret = [];
    let a = 0;
    let b = 0;
    
    arrayA.forEach((num)=>{
       a = gcd(num, a);
    });
    
    arrayB.forEach((num)=>{
        b = gcd(num, b);
    });
    
    if(arrayA.every((num)=> num%b !==0)) ret.push(b);
    if(arrayB.every((num)=> num%a !==0)) ret.push(a);
    
    if(ret.length > 1) return Math.max(...ret);
    else if(!ret.length) return 0;
    return ret[0];
}

function gcd(a,b){
    if(a === 0) return b;
    return gcd(b%a, a);
}