첫 번째 분수의 분자와 분모를 뜻하는 numer1, denom1, 두 번째 분수의 분자와 분모를 뜻하는 numer2, denom2가 매개변수로 주어집니다. 두 분수를 더한 값을 기약 분수로 나타냈을 때 분자와 분모를 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요.
● 0 <numer1, denom1, numer2, denom2 < 1,000
1 / 2 + 3 / 4 = 5 / 4입니다. 따라서 [5, 4]를 return 합니다.
9 / 2 + 1 / 3 = 29 / 6입니다. 따라서 [29, 6]을 return 합니다.
function solution(numer1, denom1, numer2, denom2) {
let total = [numer1, numer2, denom1, denom2];
let mathfractiontwo = [];
let mathfractionone = [];
let maximum = 1;
for (let i = 0; i < total.length; i++) {
if (i % 2 == 0) {
mathfractiontwo.push(total[i] * total[total.length - 1]);
} else {
mathfractionone.push(total[i] * total[total.length - 2]);
}
}
let pluseTop = mathfractiontwo[0] + mathfractionone[0];
mathfractiontwo.shift();
mathfractiontwo.unshift(pluseTop);
for (let i = 0; i <= mathfractiontwo[1]; i++) {
if (mathfractiontwo[0] % i === 0 && mathfractiontwo[1] % i === 0) {
maximum = i;
}
}
return [mathfractiontwo[0] / maximum, mathfractiontwo[1] / maximum];
}
이게 맞을까? 싶을정도로 코드가 더럽다.
분수의 덧셈까지는 구현이 되었지만, 약분에서 막혔다.
그래서 약분을 어떻게 하면 좋을까 하다가 이전에 풀었던 최대공약수를
활용하기로 했다. 그 식을 가져와 대입을 하였다.
function solution(denum1, num1, denum2, num2) {
let denum = denum1*num2 + denum2*num1;
let num = num1 * num2;
let maxinum = 1
for (let i = 0; i <= denum; i++) {
if (denum % i === 0 && num % i === 0) {
maximum = i;
}
}
return [denum / maximum, num / maximum];
}
매우 코드가 깔끔해졌다. 나는 왜 이렇게 못하는걸까?
분수의 덧셈을 num과 denum에서 끝내버렸다.
이후에 약분을 하였다.
끝!