문제 설명
첫 번째 분수의 분자와 분모를 뜻하는 numer1, denom1, 두 번째 분수의 분자와 분모를 뜻하는 numer2, denom2가 매개변수로 주어집니다. 두 분수를 더한 값을 기약 분수로 나타냈을 때 분자와 분모를 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요.
제한 사항
- 0 <numer1, denom1, numer2, denom2 < 1,000
입출력 예
입출력 예 #1
- 1 / 2 + 3 / 4 = 5 / 4입니다. 따라서 [5, 4]를 return 합니다.
입출력 예 #2
- 9 / 2 + 1 / 3 = 29 / 6입니다. 따라서 [29, 6]을 return 합니다.
나의 풀이
function solution(numer1, denom1, numer2, denom2) {
const 공약수 = [];
let 최대공약수 = 0;
let 최소공배수 = 0;
// 최대공약수를 구함
for(let i = 2; i <= (denom1 >= denom2 ? denom1 : denom2); i++) {
if((denom1 % i === 0) && (denom2 % i === 0)) 공약수.push(i);
}
if(공약수.length === 0) 최소공배수 = denom1 * denom2;
else {
최대공약수 = Math.max(...공약수);
최소공배수 = (denom1 * denom2) / 최대공약수;
}
console.log("최소공배수, 최대공약수, 공약수 => ", 최소공배수, 최대공약수, 공약수);
const 더한분자 = (numer1 * (최소공배수 / denom1)) + (numer2 * (최소공배수 / denom2));
const 더한분모 = 최소공배수;
let 더한분수공약수 = [];
let 더한분수최대공약수 = 1
for(let i = 2; i <= (더한분자 >= 더한분모 ? 더한분자 : 더한분모); i++) {
if((더한분자 % i === 0) && (더한분모 % i === 0)) 더한분수공약수.push(i);
}
더한분수최대공약수 = Math.max(...더한분수공약수);
if(더한분수공약수.length === 0) return [더한분자, 더한분모];
else return [더한분자/더한분수최대공약수, 더한분모/더한분수최대공약수];
}
'programmers > level 0' 카테고리의 다른 글
Programmers - Js - 연속된 수의 합 (0) | 2023.03.28 |
---|---|
Programmers - Js - 다음에 올 숫자 (0) | 2023.03.28 |
Programmers - Js - OX퀴즈 (0) | 2023.03.24 |
Programmers - Js - 최빈값 구하기 (0) | 2023.03.24 |
Programmers - Js - 다항식 더하기 (0) | 2023.03.23 |