Blog

분수의 덧셈

날짜 2023-03-17
사용 언어 Java
문제 유형 수학
정답률 61%
문제 URL https://school.programmers.co.kr/learn/courses/30/lessons/120808

문제 #

문제 설명 #

첫 번째 분수의 분자와 분모를 뜻하는 numer1denom1, 두 번째 분수의 분자와 분모를 뜻하는 numer2denom2가 매개변수로 주어집니다. 두 분수를 더한 값을 기약 분수로 나타냈을 때 분자와 분모를 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요.


제한사항 #
  • 0 <numer1denom1numer2denom2 < 1,000

나의 풀이 #

class Solution {
    public int[] solution(int numer1, int denom1, int numer2, int denom2) {
        int[] answer = new int[2];
        int num_res = 0;
        int den_res = 0;
        int gcd = 0;
        
		// 분자와 분모를 구한다.
        num_res = (numer1*denom2+numer2*denom1);
        den_res = denom1*denom2;
        
        // 분자와 분모의 최대공약수로 약분
        gcd = gcd(num_res, den_res);
        num_res = num_res/gcd;
        den_res = den_res/gcd;
        
        answer[0] = num_res;
        answer[1] = den_res;
        
        return answer;
    }
    
    //최대공약수 구하는 함수
     private static int gcd(int a, int b) {
            if (b == 0) {
                return a;
            }
            return gcd(b, a%b);
        }
}

다른 사람의 풀이 #

class Solution {
    public int[] solution(int numer1, int denom1, int numer2, int denom2) {
        int denom = denom1 * denom2;

        int numer_res1 = denom1 * numer2;
        int numer_res2 = denom2 * numer1;

        int numer = numer_res1 + numer_res2;

		//약분
        for(int i = denom; i >= 1; i--){
            if(numer % i == 0 && denom % i == 0){
                numer /= i;
                denom /= i;
            }
        }

        int[] answer = {numer, denom};
        return answer;
    }
}

관련개념 학습 #

이산 수학

  • 유클리드 호제법