문제설명
첫 번째 분수의 분자와 분모를 뜻하는 numer1, denom1, 두 번째 분수의 분자와 분모를 뜻하는 numer2, denom2가 매개변수로 주어집니다. 두 분수를 더한 값을 기약 분수로 나타냈을 때 분자와 분모를 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요.
제한사항
- 0 <numer1, denom1, numer2, denom2 < 1,000
입출력 예
numer1 | denom1 | numer2 | denom2 | result |
1 | 2 | 3 | 4 | [5, 4] |
9 | 2 | 1 | 3 | [29, 6] |
입출력 예 설명
입출력 예 #1
- 1 / 2 + 3 / 4 = 5 / 4입니다. 따라서 [5, 4]를 return 합니다.
입출력 예 #2
- 9 / 2 + 1 / 3 = 29 / 6입니다. 따라서 [29, 6]을 return 합니다.
정답
가장 큰 값부터 나눠야된다. 왜냐면 24 / 36 이 있다고 해보자.
2부터 나누면 12 / 18
3으로 나누면 4 /6
그다음 4로 넘어가는데, 공통으로 나눠지지 않기 때문에 기약분수가 될 수 없음. 따라서 가장 큰값부터 차례대로 내려와야한다.
function solution(numer1, denom1, numer2, denom2) {
let denom = denom1 * denom2;
numer1 = (denom / denom1) * numer1;
numer2 = (denom / denom2) * numer2;
let numer = numer1 + numer2;
let divisor = denom > numer ? numer : denom;
for (let i = divisor; i > 1; i--){
if ((denom % i === 0) && (numer % i===0)){
denom = denom / i;
numer = numer / i;
}
}
return [numer, denom]
}