문제
https://school.programmers.co.kr/learn/courses/30/lessons/120808
나의 접근 방식
- 각 분수의 분모가 동일하지 않으니 통분을 통해 크기가 같은 분수를 만들어준다.
- 유클리드 호제법으로 분자와 분모의 최대공약수를 구해준다.
- 분자와 분모에 최대공약수로 나눠준다.
function solution(numer1, denom1, numer2, denom2) {
//분자
const numerator = numer1*denom2 + numer2*denom1
//분모
const denominator = denom1*denom2
//최대공약수 구해주는 함수
function gcd(num1, num2){
//유클리드 호제법
//재귀를 통해 나머지값이 0이 될때까지 계속 나눠준다.
// 예를 들면 1번 케이스 10, 8 일 경우
// 10 % 8 = 2 => 나머지가 0이 아니므로 제수(나누는 수)8이랑 나머지2 랑 다시 나눠준다.
// 8 % 2 = 0 => 나머지가 0이므로 최대공약수는 2가 된다.
if(num2 === 0){
return num1
} else{
return gcd(num2, num1 % num2)
}
}
// 최대공약수
const gcdNumber = gcd(numerator, denominator);
// 분자와 분모에 최대공약수를 각각 나눠준다.
return [numerator/gcdNumber, denominator/gcdNumber ]
}
느낀점
0단계 문제로 문제 자체는 간단하지만 수학을 정말 정말 못하는 나에겐 쉬운 문제는 아니였다... ㅠ.ㅠ
유클리드 호제법 알고리즘에 대해 1시간 넘게 찾아보고 이해한 후 겨우 풀었다..휴