[프로그래머스-Level 0] [Javascript] 분수의 덧셈(최대공약수 이용)
2022. 10. 29. 17:03ㆍ알고리즘/프로그래머스 알고리즘 공부
반응형
안녕하세요~ totally 개발자입니다.
이 문제는 최대공약수를 이용해야 쉽게 풀리는 문제로 기약분수의 형태로 만들어주어야 합니다.
[문제]
분자1(denum1), 분자2(denum2), 분모1(num1), 분모2(num2)가 주어질 때 2개의 분수의 덧셈 알고리즘 구현
[알고리즘]
분모 통분 필요 및 통분에 맞추어서 분자를 더하고 분자와 분모를 기약분수로 만들어주면 됩니다. 기약분수로 만드는 과정에서 분자와 분모의 최대공약수를 재귀 함수 형태로 구현하면 쉽게 문제를 풀 수 있습니다.
[풀이]
function solution(denum1, num1, denum2, num2) {
// Step1: 분모를 통분하여 분자의 덧셈
const denumTotal = (num1 * denum2) + (num2 * denum1);
// Step2: 분모 통분
const numTotal = num1 * num2;
// Step3: 최대 공약수 재귀 함수 구현
const getGreatestCommonDivisor = (x, y) => {
// y가 0일 때 재귀함수 탈출
if (y === 0) return x;
// y가 0이 아닌 경우 계속 함수 호출
else {
// 첫 번째 인자 자리에 y 전달, 두 번째 인자 자리에 x % y로 나머지를 전달
return getGreatestCommonDivisor(y, x % y);
}
}
// Step4: 최대 공약수를 구함
const gcd = getGreatestCommonDivisor(denumTotal, numTotal);
// Step5: 분자와 분모를 최대공약수로 나눔
return [denumTotal / gcd, numTotal / gcd];
}
반응형
'알고리즘 > 프로그래머스 알고리즘 공부' 카테고리의 다른 글
[프로그래머스-Level 1] [JavaScript] 푸드 파이트 대회 - sort(정렬) 활용 (0) | 2022.11.24 |
---|---|
[프로그래머스-Level 1] [JavaScript] 기사단원의 무기 - 약수의 개수 구하기 (0) | 2022.11.23 |
[프로그래머스-Level 1] [JavaScript] 콜라 문제 - 재귀 함수 활용 (0) | 2022.11.23 |
[프로그래머스-Level 0] [Javascript] 배열 두 배 만들기 (0) | 2022.10.03 |
[프로그래머스-Level 0] [Javascript] 배열의 평균값 (0) | 2022.10.03 |