[프로그래머스] 분수의 덧셈 (Java)

2022. 11. 15. 16:49프로그래머스

반응형
문제 설명

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

 

제한사항
  • 0 < denum1, num1, denum2, num2 < 1000

 

입출력 예
denum1 num1 denum2 num2 result
1 2 3 4 [5, 4]
9 2 1 3 [29, 6]

 

입출력 예 설명

입출력 예 #1

  • 1 / 2 + 3 / 4 = 5 / 4입니다. 따라서 [5, 4]를 return 합니다.

입출력 예 #2

  • 9 / 2 + 1 / 3 = 29 / 6입니다. 따라서 [29, 6]을 return 합니다.

 

풀이
class Solution {
    //최대공약수 구하는 함수 (유클리드 호제법)
    public int GCD(int num1, int num2) {
        if (num1 % num2 == 0) {
            return num2;
        }
        return GCD(num2, num1 % num2);
    }
    
    public int[] solution(int denum1, int num1, int denum2, int num2) {
        denum1 *= num2; //덧셈을 위한 통분
        denum2 *= num1;
        //덧셈한 결과 값을 배열로 만들어줌 {분자, 분모}
        int[] answer = new int[]{denum1 + denum2, num1 * num2};
        int max = GCD(answer[0], answer[1]); //약분을 위해 최대공약수 구함
        
        answer[0] /= max; //분자 최대공약수로 나누기
        answer[1] /= max; //분모 최대공약수로 나누기
        
        return answer; //약분한 분수 return
    }
}
반응형