글 작성자: 망고좋아
반응형

 

🎯 최대공약수와 최소공배수

📁 문제 출처

 

코딩테스트 연습 - 최대공약수와 최소공배수

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

programmers.co.kr

 

💡 생각

  • 최대공약수는 유클리드 호제법 사용
  • 최소공배수는 a * b / gcd(a, b)로 풀이

 

🛠 나의 코드

function gcd(a, b) {
    while(b > 0) {
        let temp = a;
        a = b
        b = temp % b;
    }
    return a
}

function lcm(a, b) {
    return a * b / gcd(a, b)
}

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

    answer.push(gcd(n, m));
    answer.push(lcm(n, m));

    return answer;
}

 

리팩토링

function solution(n, m) {
    const gcd = (a, b) => a % b === 0 ? b : gcd(b, a % b);
    const lcm = (a, b) => a * b / gcd(a, b);
    return [gcd(n, m), lcm(n, m)];
}
  • b > 0a % b === 0로 표현할 수 있고 삼항 연산자를 사용해서 참이면 최대공약수인 b를 return, 아니면 재귀를 사용해서 gcd(b, a % b) 반복
  • 화살표 함수와 삼항 연산자를 사용해서 코드를 깔끔하고 효율적으로 짤 수 있다.
반응형