본문 바로가기

programmers/level 0

Programmers - Js - 분수의 덧셈

문제 설명

첫 번째 분수의 분자와 분모를 뜻하는 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 [더한분자/더한분수최대공약수, 더한분모/더한분수최대공약수]; 
}