Javascript - 분수의 덧셈

이율곡·2023년 7월 20일

Programmers

목록 보기
37/44
post-thumbnail

분수의 덧셈

문제

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

입출력 예

numer1denom1numer2denom2result
1234[5, 4]
9213[29, 6]

접근방법

이 문제의 핵심은 분수의 덧셈과 최대공약수를 이용한 기약분수 만들기다. 두 분수를 더하기 위해서는 분모가 같아야 하고, 기약분수를 만들기 위해서는 분자와 분모의 최대공약수로 나눠줘야 한다. 이를 알고서 접근을 해야 한다.

  1. 먼저 두 분수의 분모를 같게 만들기 위해 곱셈을 이용.
  2. 그런 다음 분자끼리 더하기.
  3. 이 분수를 기약분수로 만들기 위해 분자와 분모의 최대공약수를 구하기.
  4. 이를 이용해 분자와 분모를 나눠줌.

풀이

function gcd(a, b) {
    return b ? gcd(b, a % b) : a;
}

function solution(numer1, denom1, numer2, denom2) {
    let numer = numer1 * denom2 + numer2 * denom1;
    let denom = denom1 * denom2;
    let g = gcd(numer, denom);

    return [numer / g, denom / g];
}

함수는 총 2가지가 존재한다. 우선 첫 번째, gcd 함수는 최대공약수를 계산하는 함수다. 지난 번에 나온 유클리드 호제법을 여기서도 사용한다.

solution 함수에서는 먼저 두 분수의 분자를 계산한다. 이는 첫 번째 분수의 분자와 두 번째 분수의 분모를 곱하고, 두 번째 분수의 분자와 첫 번째 분수의 분모를 곱한 값을 더한 값이다.

마지막으로 분자와 분모의 최대공약수를 구하고, 이를 분자와 분모에 나누어 기약분수를 만든다. 이렇게 계산한 기약분수의 분자와 분모를 배열에 담아 반환하면 끝이다.


정리하기

분수의 덧셈 문제는, 분수의 덧셈과 기약분수로 만드는 방법에 대한 이해가 중요하다. 그래서 지난 번에 사용했던 유클리드 호제법을 사용했고 덕분에 어렵지 않게 문제를 풀 수 있었다.

profile
음악을 좋아하는 사람이 음악을 만들 듯, 개발을 좋아하게 될 사람이 쓰는 개발이야기

1개의 댓글

comment-user-thumbnail
2023년 7월 20일

글 잘 봤습니다, 많은 도움이 되었습니다.

답글 달기