유클리드 호제법 :
유클리드 호제법(Euclidean algorithm) 또는 유클리드 알고리즘은 2개의 자연수 또는 정식의 최대공약수를 구하는 알고리즘의 하나이다. 호제법이란 말은 두 수가 서로 상대방 수를 나누어서 결국 원하는 수를 얻는 알고리즘을 나타낸다. 2개의 자연수(또는 정식) a, b에 대해서 a를 b로 나눈 나머지를 r이라 하면(단, a> b), a와 b의 최대공약수는 b와 r의 최대공약수와 같다. 이 성질에 따라, b를 r로 나눈 나머지 r'를 구하고, 다시 r을 r'로 나눈 나머지를 구하는 과정을 반복하여 나머지가 0이 되었을 때 나누는 수가 a와 b의 최대공약수이다.

이번 문제를 풀기위해 고민하다 유클리드 호제법이라는 풀이 방법을 찾게 되었다. 

이번 풀이에서는 유클리드 호제법을 코드로 바꾸어 진행해보았다.

 

#나의 풀이 

function solution(n, m) {
    let small, big;
    n > m ? (big = n, small = m) : (big = m, small = n)
    while(true){
        if(big % small === 0){
            break;
        }
        else{
            let j = big;
            big = small;
            small = j % small;
        }
    }
    return [small, n*m/small]
}

개인적으로 변수의 선언을 줄이고 싶었고, 좀 더 코드 라인수를 줄이고 싶은 욕심이 있었다. 


#다른 풀이

function gcdlcm(a, b) {
    var r;
    for(var ab= a*b;r = a % b;a = b, b = r){}
    return [b, ab/b];
}

후우 왜인지 for문을 생각하지 못했다.... (for문의 조건이 저런 식으로 들어갈 수 있는 것도 몰랐다.)


 

 

+ Recent posts