Programmers_분수의 덧셈

post-thumbnail

분수의 덧셈

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

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

[풀기전 기본 상식 공부 ^^]

  • 약수 : 어떤 수를 나머지 없이 나눌 수 있는 정수
  • 기약분수 : 더이상 약분할 수 없는 상태
  • 최대공약수 : 두 수 이상의 여러수의 공약수 중 최대인수 ↔ 최소공배수

[풀이]

: 수학 개똥멍충이는 이것도 코딩치기 힘들답니다…

function solution(numer1, denom1, numer2, denom2) {
	  // 분자 구하기
    let top = numer1 * denom2 + numer2 * denom1;
		// 분모구하기
    let bottom = denom1 * denom2;
    //초기값
    let maximum = 1
		// 최대공약수 구하기
    for(let i = 1; i <= top; i++) {
        if(top % i === 0 && bottom % i === 0) {
            maximum = i
        }
    }
    return [top/maximum, bottom/maximum];
}

[유클리드로 푼 풀이]

유클리드란?

: 최대 공약수를 구하는 알고리즘

출처 : 유튜브(청개구리유여사)

//유클리드 함수 이용해서 기약분수 구하기
function fncGCD (a, b) {
    return (a%b === 0) ? b : fncGCD(b, a%b);
}
function solution(numer1, denom1, numer2, denom2) {
    // 분모를 같게 하는 식 코딩
    // 분모를 같게 하기 위해서 분자가 변하는 값 구하기
    // 변해진 분자의 값과 분모의 값을 리턴
    let top = numer1 * denom2 + numer2 * denom1;
    let bottom = denom1 * denom2;
    let gcd = fncGCD(top, bottom);
    return [top/gcd, bottom/gcd];
}

0개의 댓글