[ 프로그래머스 | Lv.1 ] 최대공약수와 최소공배수

angie·2022년 12월 6일
0
post-thumbnail
post-custom-banner

🎯 문제

문제 설명

두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의 최대공약수는 3, 최소공배수는 12이므로 solution(3, 12)는 [3, 12]를 반환해야 합니다.

제한사항

  • 두 수는 1이상 1000000이하의 자연수입니다.

🧠 풀이 방법

최대공약수

유클리드 호재법

  • 2개의 자연수 A, B에(A>B) 대해서 A를 B로 나눈 나머지를 r이라 하면, A와 B의 최대공약수는 B와 r의 최대공약수와 같다.
  • 이 성질에 따라, B를 r로 나눈 나머지 r'를 구하고, 다시 r을 r'로 나눈 나머지를 구하는 과정을 반복하여 나머지가 0이 되었을 때 나누는 수가 a와 b의 최대공약수이다.

최소공배수

  • 두 수 A,B를 곱한 값을 최대공약수로 나눈 값이다.

🔠 내 풀이

function solution(n, m) {
    // b < a
    let a;
    let b;
    if (n <= m) {
        b = n
        a = m
    } else {
        b = m
        a = n
    }
    // 최대공약수
    function gcd(a, b) {
        while (b !== 0) {
            let r = a % b;
            a = b
            b = r
        }
        return a;
    }
    // 최소공배수
    function lcm(a, b) {
        return a * b / gcd(a, b)
    }

    return [gcd(a, b), lcm(a,b)]
}

💡 다른 풀이

function gcdlcm(a, b) {
    var r;
    for(var ab= a*b;r = a % b;a = b, b = r){}
    return [b, ab/b];
}
function greatestCommonDivisor(a, b) {return b ? greatestCommonDivisor(b, a % b) : Math.abs(a);}
function leastCommonMultipleOfTwo(a, b) {return (a * b) / greatestCommonDivisor(a, b);}
function gcdlcm(a, b) {
    return [greatestCommonDivisor(a, b),leastCommonMultipleOfTwo(a, b)];
}

엄청난 코드들...

profile
better than more
post-custom-banner

0개의 댓글