첫 번째 분수의 분자와 분모를 뜻하는
numer1,denom1, 두 번째 분수의 분자와 분모를 뜻하는numer2,denom2가 매개변수로 주어집니다. 두 분수를 더한 값을 기약 분수로 나타냈을 때 분자와 분모를 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요.
1 ) 두 분수를 더한 값이 소수로 반환되므로 이것을 분수로 만들어 분자와 분모를 따로 뽑으려고 했다.
그치만 구글링을 해도 소수를 분수로 변환하는 방법은 나오지 않았다...
2 ) 분모 분자를 따로 구한다, 최소공배수를 구해서 분모 분자를 작게 만든다
( 최소공배수를 구하려면 최대공약수를 알아야함 ) → 복잡해,,,
3 ) 분모 분자를 따로 구한다, 유클리드 호제법을 이용해 최소공배수를 구해서 분모 분자를 작게 만든다!!
: 두 수의 최대공약수(GCD)를 구하는 알고리즘
( 호제법 : 두 수가 서로 상대방 수를 나누어서 원하는 수를 얻는 알고리즘 )
let gcd = (a, b) => (a % b === 0 ? b : gcd(b, a % b);
function solution(numer1, denom1, numer2, denom2) {
var answer = [];
let numer = numer1 * denom2 + numer2 * denom1; // 분자
let denom = denom1 * denom2; // 분모
let gcd = (numer, denom) => (numer % denom === 0 ? denom : gcd(denom, numer % denom));
answer[0] = numer / gcd(numer, denom);
answer[1] = denom / gcd(numer, denom);
return answer;
}