코테/프로그래머스
분수의 덧셈
Slow Motion~
2023. 2. 8. 19:00
728x90
class Solution {
public int[] solution(int numer1, int denom1, int numer2, int denom2) {
// 공약수 계산
int lcm = lcm(denom1, denom2);
// 각 분수의 분모를 공약수로 맞추어 더함
int numer = numer1 * (lcm / denom1) + numer2 * (lcm / denom2);
int denom = lcm;
// 결과 분수의 분자와 분모의 최대 공약수 계산
int gcd = gcd(numer, denom);
// 결과 분수의 분자와 분모를 최대 공약수로 나눠 기약 분수 표현
int[] answer = {numer / gcd, denom / gcd};
return answer;
}
// 최대 공약수 계산 (유클리드 호제법)
public int gcd(int a, int b) {
if (b == 0) {
return a;
} else {
return gcd(b, a % b);
}
}
// 최소 공배수 계산
public int lcm(int a, int b) {
return a * b / gcd(a, b);
}
}