카테고리 없음

프로그래머스 20탄!

Hyeon been 2023. 6. 7. 23:10

한번씩 읽고 가세요.

“ 지연되는 프로젝트에 인력을 더 투입하면 오히려 더 늦어진다. ”

- Frederick Philips Brooks
Mythical Man-Month 저자
728x90

분수의 덧셈

darklight

sublimevimemacs

JavaScript

문제 설명

첫 번째 분수의 분자와 분모를 뜻하는 numer1, denom1, 두 번째 분수의 분자와 분모를 뜻하는 numer2, denom2가 매개변수로 주어집니다. 두 분수를 더한 값을 기약 분수로 나타냈을 때 분자와 분모를 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요.


제한사항

  • 0 <numer1, denom1, numer2, denom2 < 1,000

입출력 예

numer1 denom1 numer2 denom2 result

1 2 3 4 [5, 4]
9 2 1 3 [29, 6]

입출력 예 설명

입출력 예 #1

  • 1 / 2 + 3 / 4 = 5 / 4입니다. 따라서 [5, 4]를 return 합니다.

입출력 예 #2

  • 9 / 2 + 1 / 3 = 29 / 6입니다. 따라서 [29, 6]을 return 합니다.
function fnGCD(a, b){
    return (a%b)? fnGCD(b, a%b) : b;
}

function solution(denum1, num1, denum2, num2) {
    let denum = denum1*num2 + denum2*num1;
    let num = num1 * num2;
    let gcd = fnGCD(denum, num); //최대공약수

    return [denum/gcd, num/gcd];
}

두 개의 분수를 더하고, 그 결과를 기약분수로 변환하여 반환하는 함수인 solution을 구현하고 있습니다.

fnGCD 함수는 주어진 두 수의 최대공약수(Greatest Common Divisor, GCD)를 계산하기 위해 재귀적으로 호출됩니다. 함수의 구현은 유클리드 호제법을 사용하고 있습니다. 만약 a를 b로 나눈 나머지가 0이 아니라면, b와 a를 b로 나눈 나머지를 인자로하여 fnGCD 함수를 재귀적으로 호출합니다. 그렇지 않은 경우(즉, a를 b로 나눈 나머지가 0인 경우)에는 b를 반환합니다.

solution 함수는 주어진 분수들의 덧셈 연산을 수행합니다. 먼저, denum1과 num2를 곱하고, denum2와 num1을 곱하여 denum 변수에 할당합니다. 그리고 num1과 num2를 곱하여 num 변수에 할당합니다. 이렇게 구한 denum과 num을 이용하여 fnGCD 함수를 호출하여 최대공약수(gcd)를 구합니다.

마지막으로, denum과 num을 각각 gcd로 나누어 기약분수로 변환한 결과인 [denum/gcd, num/gcd]를 반환합니다.