[프로그래머스] 분수의 덧셈
카테고리 : 컴퓨터 공학
태그: programmers · Code Refactoring · 참고 할 만한 다른 사람의 코드 · 코딩 기초 트레이닝 · 프로그래머스 · 코딩테스트 연습 · JavaScript · 분수의 덧셈 · js 분수의 덧셈
태그: programmers · Code Refactoring · 참고 할 만한 다른 사람의 코드 · 코딩 기초 트레이닝 · 프로그래머스 · 코딩테스트 연습 · JavaScript · 분수의 덧셈 · js 분수의 덧셈
문제 설명
첫 번째 분수의 분자와 분모를 뜻하는 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 합니다.
나의 풀이
function solution(numer1, denom1, numer2, denom2) {
var answer = [];
let numberResult = numer1 * denom2 + numer2 * denom1;
let denomResult = denom1 * denom2;
let maximum = 1;
for (let i = 1; i <= numberResult; i++) {
if (numberResult % i === 0 && denomResult % i === 0) {
maximum = i;
}
}
return [numberResult / maximum, denomResult / maximum];
}
나의 두번째 풀이(Code Refactoring)
function solution(numer1, denom1, numer2, denom2) {
let Numer = numer1 * denom2 + numer2 * denom1;
let Denom = denom1 * denom2;
let min;
if (Numer < Denom) {
min = Numer;
} else {
min = Denom;
}
while (true) {
if (Numer % min === 0 && Denom % min === 0) {
return [Numer / min, Denom / min];
}
min -= 1;
}
}
// 1. 분자와 분모를 만들어준다
// 2. 이때 가장 작은수를 먼저 찾는다 분모와 분자중 큰값을 min에 넣어준다
// 3. 분자와 분모가 min으로 나누어 떨어질 때까지 min 값을 감소해서 기약분수로 반환
참고 할 만한 다른 사람의 코드
function fnGCD(a, b) {
return a % b ? fnGCD(b, a % b) : b;
}
function solution(denum1, num1, denum2, num2) {
let denum = denum1 * num2 + denum2 * num1;
let num = num1 * num2;
let gcd = fnGCD(denum, num);
return [denum / gcd, num / gcd];
}
// 1. 유클리드 호제법으로 최대공약수를 쉽게 찾을 수 있다
// 2. 걍 외우자