Programmers/Level 1

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

emayom 2021. 6. 30. 15:33

⚠️ 아래 내용은 모두 개인적인 참고 / 기록을 위한 용도 입니다. 참고해주시고 편안하게 봐주세요 :) ⚠️

 

 

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

 

👇🏻문제링크

 

👇🏻

시행착오

( + 코드를 작성하면서든 생각들.)

1.

최대공약수와 최소공배수와의 관계를 잘 정리해놓은 블로그 글이 있어 참고했다.

최대공약수를 아래 for문으로 구성하던 중에 글을 읽게되어서 최소공배수를 구할 때 활용했다. (단, n>m)

최대공약수를 구하고나니 할 일이 다 끝나서 쉽게 통과할 수 있었다!

function solution(n, m) {
    //Greatest common divisor : 최대공약수
    //least common multiple : 최소공배수
    var gcd, lcm;
    var mod = 1;
    
    for(let i=0; ; i++){
        mod = m%(n/i);
        if(mod==0) {
            gcd = n/i;  
            lcm = n*m /gcd;
            //최소공배수 : 최대공약수가 0이 아닌 두 수의 곱 / 최대 공약수
            break; 
        }
    }
    return [gcd, lcm];
}

2.

최대공약수를 쉽게 구하기위해 사용한다는  '유클리드 호제법'

을 따라해보려고  위의 코드를 수정해봤다ㅎㅎㅎㅎ,,

 

👇🏻 '유클리드 호제법'

//a와 b의 최대공약수 구하기 (*단, a>b)

while(b>0){
    var temp = b;
    b = a % b;
    a = temp;
} 
return a;

예) a = 3, b =12

      var temp = b;   =>  12;   =>  3;

      b = 3%12;         =>  3;      =>   0

      a = temp;          =>  12;   =>   3;

                                   => b가 0이어서 3을 리턴하고 종료.

예) a = 2, b =5

      var temp = b;  =>  5;     =>  2;   => 1;

      b = 2%5;           =>  2;     =>   1;  => 0;

      a = temp;         =>  5;     =>   2;   => 1;

                                  => b가 0이어서 1을 리턴하고 종료.

 

다른 풀이들을 보니까 함수로 분리해서도 풀길래 

최대공약수, 최소공배수를 함수로 분리해서 함수의 결과를 리턴했다.

function solution(n, m) {
    //Greatest common divisor : 최대공약수
    function gcd(n,m){
        while(m>0){
            var temp = m;
            m = n % m;
            n = temp;
        }return n;
    }
    
    //least common multiple : 최소공배수
    function lcm(n,m){
        return n*m / gcd(n,m);
    }

    return [gcd(n,m), lcm(n,m)];
}

다른 풀이들도 있었는데 아직은 이해하기가 너무 어려워서

다음 번에 다시 풀어봐야겠다!