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

이유정·2022년 9월 22일
0
post-thumbnail

내가 푼 코드


function solution(n, m) {
    let least = 0; 
    let max = 0; 
    let arr = [];
    if(m%n ===0){
        least = n
        max = m
        arr.push(least,max)
    }else{
        least = 1;
        max = n*m
        arr.push(least,max)
    }
    return arr
}

그냥, 눈에 보이는 케이스만 만족한 코드다,,,
따라서, 최대공약수를 구하는 유클리드 호제법을 배워보자!!!
최소 공배수는 input으로 주어진 자연수 2개를 곱하고 최대 공약수로 나누는 방식

유클리드 호제법 :
나머지가 0이 될때 나눠준 수가 최대공약수가 된다!!!!!!!!
a > b , // 8>3
a%b = ...r // 8%3 = ...2
b%r = ...r2 // 3%2 = ...1
r%r2 = 0 // 2%1 = ...0

이것을 토대로 코드를 작성해봤는데, 실패했다.


function solution(n, m) {
  // n%m = r
  // m% r = r2
  // r% r2 = r3
  //나머지값이 r=0이 되는 순간 나눠준 값이 최대공약수다.
    let result = []
    let number = n   
    let divider= m
    if(n<m){
        number = m
        divider = n
    }
    let remainder = 1 // 임의값 설정 
    for(remainder>0){
    remainder = number % divider 
   number = divider
   divider = remainder
        if(remainder ===0){
      result.push(divider)      
      result.push(n*m/divider)
        }
    } 
   return result 
} 

다른 분의 코드는??

function solution(n, m) {
    var answer = [];
    const greatest = (a, b) => {  
        if (b === 0) return a   
        return greatest(b, a % b)  
    }
    const least = (a,b) => (a*b) / greatest(a,b)
    return [greatest(n,m), least(n,m)]
}
profile
팀에 기여하고, 개발자 생태계에 기여하는 엔지니어로

0개의 댓글