코테/프로그래머스

분수의 덧셈

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);
    }
}