Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript로 유리수 배열의 합 구하기: 기약분수 형태로 결과 반환하기

두 개의 하위 배열을 요소로 가지는 배열을 입력받아 처리하는 JavaScript 함수를 작성해야 합니다. 각 하위 배열은 두 개의 숫자를 포함하며, 분수 형태의 유리수를 나타냅니다.

함수는 이 두 유리수를 더한 뒤, 그 결과를 기약분수(더 이상 약분할 수 없는 가장 간단한 형태)로 표현하는 두 숫자로 이루어진 새로운 배열을 반환해야 합니다. 예를 들어 [1, 2]는 1/2를, [1, 3]은 1/3을 의미합니다.

풀이 코드

const arr = [
    [1, 2],
    [1, 3]
];
const findSum = (arr = []) => {
    const hcf = (a, b) => b ? hcf(b, a % b) : a;
    if(!arr.length){
        return null;
    };
    const [n, d] = arr.reduce(([a, x], [b, y]) => [a*y + b*x, x*y]);
    const g = hcf(n, d);
    return g === d ? n / d : [n / g, d / g];
};
console.log(findSum(arr));

코드 동작 원리

  • 최대공약수 계산(hcf): 유클리드 호제법을 재귀 호출 방식으로 구현하여 두 수의 최대공약수를 구합니다.
  • 분수 덧셈(reduce): reduce 메서드를 사용해 모든 분수를 통분하여 더합니다. 분자는 'a*y + b*x' 공식으로, 분모는 'x*y'로 계산됩니다.
  • 기약분수 변환: 구해진 분자와 분모를 최대공약수 g로 나누어 약분합니다.
  • 정수 결과 처리: 분모가 최대공약수와 같다면 결과가 정수라는 의미이므로, 배열 대신 나눈 값을 그대로 반환합니다.

실행 결과

[5, 6]

1/2 + 1/3은 통분하면 3/6 + 2/6 = 5/6이 되며, 이 값은 더 이상 약분되지 않으므로 최종 결과로 [5, 6]이 출력됩니다.