。゚(*´□`)゚。

코딩의 즐거움과 도전, 그리고 일상의 소소한 순간들이 어우러진 블로그

ㅋㅌ

**** 분수의 덧셈 / 최대공약수 구하기

quarrrter 2023. 6. 12. 02:07
class Solution {
    public int[] solution(int numer1, int denom1, int numer2, int denom2) {
        int[] answer = new int[2];
        
        if(denom2 % denom1 == 0) {
            if(denom2 == denom1) {
                int plus = numer1 + numer2;
                answer[0] = plus;
                answer[1] = denom2;
            } else {
            int denom = denom2 / denom1;
            denom1 = denom1 * denom;
            numer1 = numer1 * denom;
            int plus = numer1 + numer2;
            answer[0] = plus;
            answer[1] = denom2;}
            
        }else if(denom1 % denom2 == 0) {
            int denom = denom1 / denom2;
            denom2 = denom2 * denom;
            numer2 = numer2 * denom;
            int plus = numer1 + numer2;
            answer[0] = plus;
            answer[1] = denom1;
        } 
        else { 
            numer1 = numer1 * denom2;
            numer2 = numer2 * denom1;
            int plus = numer1 + numer2;
            int denom = denom1 * denom2;
            answer[0] = plus;
            answer[1] = denom;
        }
        
        // 약분 처리
        int gcd = greatestCommonDivisor(answer[0], answer[1]);
        answer[0] = answer[0] / gcd;
        answer[1] = answer[1] / gcd;
        
        
        if (answer[0] % answer[1] == 0) {
            answer[0] = answer[0]/answer[1]; 
        } else if (answer[1] % answer[0] == 0) {
            answer[1] = answer[1]/answer[0]; 
        }
        return answer;
    }
        // 최대공약수 계산 메소드
    private int greatestCommonDivisor(int a, int b) {
        while (b != 0) {
            int temp = b;
            b = a % b;
            a = temp;
        }
        return a;
    }
}​
class Solution {
    public int[] solution(int denum1, int num1, int denum2, int num2) {
        int[] answer = new int[2];

        answer[0]=denum1*num2+denum2*num1;
        answer[1]=num1*num2;
        int min = Math.min(answer[0],answer[1]);
        int max = 1;
        for(int i=1; i<=min; i++){
            if(answer[0]%i==0 && answer[1]%i==0){
                max= i;
            }
        }
        answer[0] /= max;
        answer[1] /= max;
        return answer;
    }
}


주어진 코드는 두 개의 분수를 더하고, 그 결과를 기약 분수로 변환하여 반환하는 메서드입니다. 각 분수는 분모(denum1, denum2)와 분자(num1, num2)로 표현됩니다.


1. answer 배열을 생성하고 크기가 2인 배열로 초기화합니다.
2. 분수의 덧셈을 수행하여 answer[0]에 분자의 합을, answer[1]에 분모를 저장합니다.
3. answer[0]과 answer[1] 중 작은 값을 min 변수에 저장합니다.
4. max 변수를 1로 초기화합니다.
5. i를 1부터 min까지 증가시키면서, answer[0]과 answer[1] 모두 i로 나누어지는 경우에만 max 값을 i로 갱신합니다. 이를 통해 answer[0]와 answer[1]의 최대 공약수(max)를 구합니다.
6. answer[0]와 answer[1]를 max로 나누어 기약 분수로 변환합니다.
7. 최종적으로 변환된 기약 분수를 담은 answer 배열을 반환합니다.
8. 즉, 주어진 분수들을 더한 후, 그 결과를 기약 분수로 변환하여 반환하는 코드입니다.