두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수 구현하기
두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요.
배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다.
예를 들어 두 수 3, 12의 최대공약수는 3, 최소공배수는 12이므로 solution(3, 12)는 [3, 12]를 반환해야 합니다.
n | m | return |
3 | 12 | [3, 12] |
2 | 5 | [1, 10] |
최소공배수는 입력받은 두 수의 곱을 최대공약수로 나눈 것과 같다. 따라서 먼저 최대공약수를 구하고, 최소공배수를 구하면 된다.
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의 경우, 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];
}