최대공약수와 최소공배수 (Level 1)
문제
두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환해주는 gcdlcm 함수를 완성해 보세요.
배열의 맨 앞에 최대공약수, 그 다음 최소공배수를 넣어 반환하면 됩니다.
예를 들어 gcdlcm(3,12) 가 입력되면, [3, 12]를 반환해주면 됩니다.
풀이
function gcdlcm(a, b) {
let gcd = 1, lcm = 1;
for (let i = 1; i <= Math.min(a,b); i++) {
if ((a%i == 0) && (b%i == 0)) {
gcd = i
}
}
lcm = a*b/gcd
return [gcd, lcm]
}
// 아래는 테스트로 출력해 보기 위한 코드입니다.
console.log(gcdlcm(3,12));
s에서 p와 y가 매치되는 배열의 길이가 같을 때, p와y의 개수가 0개일 때, 나머지 경우로 나눠 조건문 생성
다른 사람의 풀이
function greatestCommonDivisor(a, b) {return b ? greatestCommonDivisor(b, a % b) : Math.abs(a);}
function leastCommonMultipleOfTwo(a, b) {return (a * b) / greatestCommonDivisor(a, b);}
function gcdlcm(a, b) {
return [greatestCommonDivisor(a, b),leastCommonMultipleOfTwo(a, b)];
}
// 아래는 테스트로 출력해 보기 위한 코드입니다.
console.log(gcdlcm(3,12));
재귀함수를 통한 최대공약수 구하기. 상당히 신기하고 이해하는데 시간이 좀 걸렸지만, 유용하게 사용할 수도 있을듯함
그냥 첫줄만 써주면 되는거였다..
p, y 둘다 0인경우도 어짜피 0으로 동일하기 때문에 두 조건을 합쳐주고 나머지는 자동으로 false가 리턴되도록 작동함.