📢 문제 설명
두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의 최대공약수는 3, 최소공배수는 12이므로 solution(3, 12)는 [3, 12]를 반환해야 합니다.
⛔ 제한 사항
두 수는 1이상 1000000이하의 자연수입니다.
유클리드 호제법
📍 숫자 a,b는 a>b, b/a의 나머지가 r인 경우
a와 b의 최대공약수 = b와 r의 최대 공약수
r= 0일때 b가 최대공약수 r= 0인경우 b/r로 나는 나머지 r0을 반복하여 나머지가 0이 되는 경우 나누는 수가 a,b의 최대 공약수 이다.
function solution(n, m) {
let answer = [];
let min = m > 0 && n > 0 ? Math.min(m, n) : null;
let max = m > 0 && n > 0 ? Math.max(m, n) : null;
answer[0] = gcd(min, max);
answer[1] = lcm(min, max);
return answer;
}
function gcd(min, max) {
if (max % min === 0) {
return min;
} else {
while (min > 0) {
let val = max % min;
max = min;
min = val;
return val;
}
}
}
function lcm(min, max) {
return Math.floor(
gcd(min, max) * (min / gcd(min, max)) * (max / gcd(min, max))
);
}
테스트가 반만 통과한다.. else 잘못 쓴 것 같다..
다 시 짜 세 욧 .... 엉망이에요~ 피드백 해줄 것도 없음
function solution(n, m) {
let answer = [];
let min = Math.min(m, n);
let max = Math.max(m, n);
answer[0] = gcd(min, max);
answer[1] = (min * max) / answer[0];
return answer;
}
function gcd(min, max) {
if (Math.floor(max % min) === 0) {
return min;
} else {
while (max / min > 1) {
let num = max % min;
max = min;
min = num;
if (num === 0) break;
}
return max;
}
}
Math.floor
로 처리 (반내림)function solution(n, m) {
let answer = [];
let flag = n > m;
let big = flag ? n : m;
let small = flag ? m : n;
flag = true;
while (flag) { // true 라서 무조건 적으로 돌음
const left = big % small; // 큰수 / 작은수의 나머지
//left = big(samll이었던 것) % small (left였던 것)
flag = left != 0; //flag에 left !=0 일때 의 true false 값을 담음
if (flag) { // if(true)일 때
big = small; // 그 중 작은 수
small = left; // 작은 수에는 나머지 값
}
}
answer.push(small); // push는 선입 선출
answer.push((n * m) / small);
return answer;
}
function solution(n, m) {
let flag = n > m;
let big = flag ? n : m;
let small = flag ? m : n;
const min = recursion(big, small);
const max = (n * m) / min;
return new Array(min, max);
}
function recursion(big, small) {
const remainder = big % small;
return remainder > 0 ? recursion(small, remainder) : small;
}