프로그래머스 코딩테스트 _ 분수의 덧셈

예진·2023년 6월 21일

개인 공부

목록 보기
2/15

프로그래머스 _ 분수의 덧셈

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

1 ) 두 분수를 더한 값이 소수로 반환되므로 이것을 분수로 만들어 분자와 분모를 따로 뽑으려고 했다.
그치만 구글링을 해도 소수를 분수로 변환하는 방법은 나오지 않았다...

2 ) 분모 분자를 따로 구한다, 최소공배수를 구해서 분모 분자를 작게 만든다
( 최소공배수를 구하려면 최대공약수를 알아야함 ) → 복잡해,,,

3 ) 분모 분자를 따로 구한다, 유클리드 호제법을 이용해 최소공배수를 구해서 분모 분자를 작게 만든다!!

- 유클리드 호제법

: 두 수의 최대공약수(GCD)를 구하는 알고리즘
( 호제법 : 두 수가 서로 상대방 수를 나누어서 원하는 수를 얻는 알고리즘 )

let gcd = (a, b) => (a % b === 0 ? b : gcd(b, a % b);


JavaScript 풀이

function solution(numer1, denom1, numer2, denom2) {
    var answer = [];
    let numer = numer1 * denom2 + numer2 * denom1;  // 분자
    let denom = denom1 * denom2;  // 분모
    
    let gcd = (numer, denom) => (numer % denom === 0 ? denom : gcd(denom, numer % denom));

    answer[0] = numer / gcd(numer, denom);
    answer[1] = denom / gcd(numer, denom);
    
    return answer;
}
profile
😊

0개의 댓글