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

Narcoker·2022년 9월 16일
0

코딩테스트

목록 보기
35/150

문제 설명

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

제한 사항

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

입출력 예

풀이

유클리드 호제법을 활용하여 최대공약수를 구한다.
최소공배수는 두수의 곱 / 최대공약수 임을 활용하여 구했다.

유클리드 호제법
a,b (a>b) 가 있을 때,
a % b 가 0이 아니면 a는 b 가 되고 b는 a%b 가 된다.
b 가 0이 될때까지 반복한다.
b 가 0일 때 a 값이 최대공약수가 된다.

function solution(n, m) {
    let div;
    let a = n, b = m;
    if(a<b) [a,b] = [b,a];
    while(b !== 0){
        div = a%b;
        [a,b] = [b, div];
    }
    return [a, n*m / a]
}

다른사람의 풀이

재귀함수를 이용한 풀이

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
열정, 끈기, 집념의 Frontend Developer

0개의 댓글