프로그래머스 분수의 덧셈

milmil·2023년 4월 9일
0
post-thumbnail

❓문제 설명

매개변수

1) 첫 번째 분수의 분자 numer1
2) 첫 번째 분수의 분모 denom1
3) 두 번째 분수의 분자 numer2
4) 첫 번째 분수의 분모 denom2

두 분수를 더한 값기약 분수로 나타냈을 때 분자와 분모를 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요.

제한사항

0 <numer1, denom1, numer2, denom2 < 1,000

입출력 예

❗풀이

1. 분수의 덧셈

분모는 분모끼리 곱한 것을 넣고,
분자는 다른 분모와 각각 곱해서 더한 것을 넣으면 된다.

ex) 1/2 + 2/3 = (1 * 3) + (2 * 2) / (2 * 3) = 7 / 6  

2. 기약 분수

기약분수란?
분자와 분모의 공약수가 1뿐이어서 더이상 약분되지 않는 분수

ex) 1/3, 4/7

기약분수로 만드려면 분자와 분모를 최소 공배수로 나누면 된다.

3. 분자와 분모를 배열에 담아서 리턴

결과값을 배열에 담으면 끝

const solution = (numer1, denom1, numer2, denom2) => {
    // 분자 
	// (분자1 * 분모2) + (분자2 * 분모1)
    let topNum = numer1 * denom2 + numer2 * denom1;
    // 분모
    // (분모1 * 분모2)
    let botNum = denom1 * denom2;
    // 최소 공배수
    let maximum = 1;
    // 약분
    // i는 1부터 시작해서 분자의 값과 같아질 때까지 1씩 증가한다
	// 분자를 i로 나눠서 나머지가 없고, 분모를 i로 나눠서 나머지가 없을 때 최소 공배수에 i값을 넣는다.  
    for(let i = 1; i <= botNum; i++) {
        if(topNum % i === 0 && botNum % i === 0) {
            maximum = i;
        }
    }
    // 분모와 분자를 최소공배수로 나눈 값들을 배열에 담아 리턴한다.
    return [topNum / maximum, botNum / maximum];
}
profile
You can't change yourself if you don't know about yourself.

0개의 댓글