Developer. Designer

프로그래머스 코딩입문 Day2-3

분수의 덧셈😀

첫 번째 분수의 분자와 분모를 뜻하는 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]


function solution(numer1, denom1, numer2, denom2) {
  // 분자와 분모를 더함
  var resultNumer = numer1 * denom2 + numer2 * denom1;
  var resultDenom = denom1 * denom2;

  // 최대공약수를 구하는 함수
  function gcd(a, b) {
    return b === 0 ? a : gcd(b, a % b);
  }

  // 최대공약수를 구하고 기약 분수로 만듦
  var commonDivisor = gcd(resultNumer, resultDenom);
  resultNumer /= commonDivisor;
  resultDenom /= commonDivisor;

  var answer = [resultNumer, resultDenom];
  return answer;
}

resultNumer와 resultDenom 변수를 사용하여 두 분수의 합의 분자와 분모를 계산합니다.
이때, 분자는 각 분수의 분자를 서로 교차해서 곱한 뒤 더하고, 분모는 각 분수의 분모를 서로 곱한 값을 사용합니다.

gcd 함수는 최대공약수를 구하는 함수입니다. 이 함수는 재귀적으로 작성되어 있습니다. 최대공약수를 구하는 데에는 유클리드 호제법을 사용하였습니다.

최대공약수를 사용하여 resultNumer와 resultDenom을 나눠주고, 결과를 배열로 만들어 반환합니다. 이 배열은 순서대로 기약 분수의 분자와 분모를 포함하고 있습니다.

간단하게 말하면, 이 코드는 두 분수를 더한 후에 그 결과를 기약 분수로 만들어주는 함수입니다.