🗃️javascript/프로그래머스
분수의 덧셈(기초 day2)
하얀성
2023. 1. 10. 13:54
<문제 설명>
제한사항
입출력 예numer1denom1numer2denom2result
입출력 예 설명
첫 번째 분수의 분자와 분모를 뜻하는 numer1, denom1, 두 번째 분수의 분자와 분모를 뜻하는 numer2, denom2가 매개변수로 주어집니다. 두 분수를 더한 값을 기약 분수로 나타냈을 때 분자와 분모를 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요.
제한사항
- 0 <numer1, denom1, numer2, denom2 < 1,000
입출력 예numer1denom1numer2denom2result
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 합니다.
<제출 답안>
분자 분모 곱해준 뒤에 각 분모에 곱한 만큼 분자에 곱해서 분자 분모 합을 만들고, 기약분수 구하라고 했으니, 분자와 분모를 최대한 나눌 수 있게끔 최대공약수를 구해줘서 나누기 실행해줌.
function solution(numer1, denom1, numer2, denom2) {
const up = (numer1 *denom2 + numer2*denom1)
const down = (denom1 * denom2)
let go = 0;
for(let i=1; i<=(down) ; i++){
if(up % i ==0 && down % i ==0 ){
go = i;
}
}
return [up / go , down /go]
}
const solution = (denum1, num1, denum2, num2) => {
let [ denum, num ] = [denum1 * num2 + denum2 * num1, num2 * num1]
while(true) {
let isContinue = false
const min = denum < num ? denum : num
for (let i=2; i<=min; i++) {
if (denum % i === 0 && num % i === 0) {
denum = denum / i
num = num / i
isContinue = true
break
}
}
if (!isContinue) {
break
}
}
return [ denum, num ]
}
다른 사람 코드도 살펴보니 접근방식이 비슷하다.