[프로그래머스-Level 0] [Javascript] 분수의 덧셈(최대공약수 이용)

2022. 10. 29. 17:03알고리즘/프로그래머스 알고리즘 공부

반응형

안녕하세요~ totally 개발자입니다.

 

이 문제는 최대공약수를 이용해야 쉽게 풀리는 문제로 기약분수의 형태로 만들어주어야 합니다.

 

[문제]

 

분자1(denum1), 분자2(denum2), 분모1(num1), 분모2(num2)가 주어질 때 2개의 분수의 덧셈 알고리즘 구현

 

[알고리즘]

 

분모 통분 필요 및 통분에 맞추어서 분자를 더하고 분자와 분모를 기약분수로 만들어주면 됩니다. 기약분수로 만드는 과정에서 분자와 분모의 최대공약수를 재귀 함수 형태로 구현하면 쉽게 문제를 풀 수 있습니다.

 

[풀이] 

 

function solution(denum1, num1, denum2, num2) {
	// Step1: 분모를 통분하여 분자의 덧셈
    const denumTotal = (num1 * denum2) + (num2 * denum1);
    
    // Step2: 분모 통분
    const numTotal = num1 * num2;
    
    // Step3: 최대 공약수 재귀 함수 구현
    const getGreatestCommonDivisor = (x, y) => {
    	// y가 0일 때 재귀함수 탈출
        if (y === 0) return x;
        // y가 0이 아닌 경우 계속 함수 호출
        else {
        	// 첫 번째 인자 자리에 y 전달, 두 번째 인자 자리에 x % y로 나머지를 전달
            return getGreatestCommonDivisor(y, x % y);
        }
    }
    
    // Step4: 최대 공약수를 구함
    const gcd = getGreatestCommonDivisor(denumTotal, numTotal);
    
    // Step5: 분자와 분모를 최대공약수로 나눔
    return [denumTotal / gcd, numTotal / gcd];
}

 

 

 

반응형