개발자 '쑥말고인절미'

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

STUDY/코딩테스트

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

쑥말고인절미 2022. 8. 17. 22:06

문제


내 답안

function solution(n, m) {
    var answer = [];
    let originN = n;
    let originM = m;

    while(m!=0){
        let r = n % m;
        n = m;
        m = r;
    }
    answer.push(n);
    answer.push(originN * originM / n);
    
    return answer;
}

메모

세상...유클리드 호제법.... 한시간 넘게 싸매고 있었는데 친구가 문제를 풀었다며 유클리드 호제법을 찾아보라 했다.... 정말.... 대단하다.... ^^..............

내가 생각한 방법으로는 테스트 5, 8, 13, 14, 15를  실패했고 n과 m 모두 5인 경우에도 제대로 작동하지 않았다. 퇴근하고 앉아서 한시간 넘게 고민하다보니 점점 피곤함이 몰려와서 내 뜻대로 코딩하길 포기하고 유클리드 호제법을 사용해 해결했다 하휴 아래 추가한 소스가 내 의견대로 작성했지만 테스트를 통과하지 못한 소스이다...^^ 버리기 아쉬워서... 남겨놓는다.... 나중에 내가 다시 보면서 수정하지 않을까 라는 기대도.....^^......

function solution(n, m) {
    var answer = [];
    let numN = [];
    let numM = [];
    let sum = 1;
    let originN = n;
    let originM = m;
    
    for(let i = 2; i <= n; i++){
        while(n % i == 0){
            n /= i;
            numN.push(i);
        }
    }
    
    for(let i = 2; i <= m; i++){
        while(m % i == 0){
            m /= i;
            numM.push(i);
        }
    }
    
    let min = numN.filter(x => numM.includes(x));
    if(min.length == 0){
        answer.push(sum);
    } else {
        for(let i = 0; i < min.length; i++){
            sum *= min[i];
        }
        answer.push(sum);
    }
    
    let max = (originN * originM) / sum;
    answer.push(max);
        
    return answer;
}

참고링크

https://twpower.github.io/69-how-to-get-gcd-and-lcm

 

[Algorithm] 코드로 최대공약수(GCD)와 최소공배수(LCM) 구하기

Practice makes perfect!

twpower.github.io