프로그래머스
[JavaScript] 분수의 덧셈 - 프로그래머스
jjangsh
2024. 7. 17. 22:02
문제 :
문제를 보고 당황했지만 어릴 적 기억을 떠올려 분수를 더하려면 통분을 먼저 해야겠다고 생각했다.
통분을 하면 이런 형태가 될 것이고,
이건 더한 후 모습일 것이다.
이걸 배열에 담아 [분자, 분모] 의 형태로 return만 하면 쉬웠겠지만, 문제에서는 기약 분수로 나타냈을 때 분자와 분모를 원했기 때문에 약분을 해서 기약 분수로 만들어야 했다.
기약 분수로 만드는 법은 분모와 분자를 그들의 최대공약수로 나누면 된다.
그럼 최대공약수를 어떻게 구할 것인가 고민했다.
두 수를 나눴을 때 둘 다 나머지가 0이 나오는 수를 찾으면 된다.
내 풀이 :
function solution(numer1, denom1, numer2, denom2) {
let arr = [];
let numer = numer1 * denom2 + denom1 * numer2;
let deno = denom1 * denom2;
let gcd = 1;
let min = Math.min(deno, numer);
for(let i = 2; i <= min; i++) {
if(numer % i == 0 && deno % i == 0) {
gcd = i;
}
}
arr.push(numer/gcd, deno/gcd);
return arr;
}
그래서 반복문으로 2부터 두 수중 더 작은 숫자까지 반복문을 돌려 i인 숫자로 나눴을 때 두 수 모두 나머지가 0인걸 최대공약수로 하겠다는 코드를 짰다.
(처음에 i =0 부터 돌리다가 나중에 굳이? 라고 깨닫고 바꿨다...)
최대공약수로 두 수를 각각 나누면 기약 분수로 나타낼 수 있을 것이고, 그 기약 분수의 분모, 분자를 배열에 담아 return 시켰다.
그리고 gcd의 초깃값을 1로 설정해두었기 때문에 최대공약수가 없으면 이미 기약 분수의 형태일 것이고 1로 나누어도 변하지 않기 때문에 상관없었다.
(처음에 gcd 초깃값을 0으로 했다가 틀렸음...)