99Club
Posts

© 2025. woongsnote All rights reserved.

Beginner
2024-04-29

최대공약수와 최소공배수

두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수 구현하기

#99일지#99클럽#TIL#개발자스터디#코딩테스트#항해
직접 풀러가기

문제 설명

두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요.

배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다.

예를 들어 두 수 3, 12의 최대공약수는 3, 최소공배수는 12이므로 solution(3, 12)는 [3, 12]를 반환해야 합니다.

제한 사항

  • 두 수는 1이상 1000000이하의 자연수입니다.
nmreturn
312[3, 12]
25[1, 10]

풀이

최소공배수는 입력받은 두 수의 곱을 최대공약수로 나눈 것과 같다. 따라서 먼저 최대공약수를 구하고, 최소공배수를 구하면 된다.

JavaScript

function solution(n, m) {
    var answer = [];
    let G  = 0;
    let L = 0;
    
    let max = n-m > 0 ? n : m 
    for(let i=1; i<max; i++){
        if(n% i === 0 && m%i ===0)
            G = i;
         
    }
    L = n * m / G
    
    answer = [G, L]
    
    return answer;
}

function solution(n, m) {
    let G = 1;
    let L = 0;
    
    const minVal = Math.min(n,m)
    
    for (let i = minVal; i > 0; i--) {
        if (n % i === 0 && m % i === 0) {
            G = i;
            break;
        }
    }
    
    L = (n * m) / G
    
    return [G, L];
}

Python

Python의 경우, math에 최대공약수를 구하는 gcd 함수가 존재해서, math를 import하면 쉽게 해결이 가능하다.

import math

def solution(n, m):
    G = math.gcd(n, m)
    L = n * m // G
    return [G, L]

그렇다면, JavaScript에서도 gcd 함수를 구현할 수 있지 않을까?

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

해당 함수를 사용하면, 아래와 같이 코드를 구현할 수 있다.

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

function solution(n, m) {
    let G = gcd(n, m);
    let L = (n * m) / G;
    return [G, L];
}