본문 바로가기
프로그래머스/Lv.0

프로그래머스 > 코딩테스트 입문 > 분수의 덧셈 - JAVA

by 아찌방 2022. 12. 16.

문제

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

 

제한사항

  • 0 <denum1, num1, denum2, num2 < 1,000

 

입출력 예

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

 

 

코드

class Solution {
    public int[] solution(int denum1, int num1, int denum2, int num2) {
        int[] answer = new int[2];
        int denum = (denum1*num2)+(denum2*num1);
        int num = num1*num2;
        int n = gcd(denum, num);
        answer[0] = denum/n;
        answer[1] = num/n;
        return answer;
    }
    public static int gcd(int num1, int num2)
    {
        if(num1%num2 == 0)
        {
            return num2;
        }
        return gcd(num2, num1%num2);
    }
        
}

 

해설

결과를 기약 분수의 형태로 나타내야 한다.

이렇게 결과 값이 나와야 한다.

1단계를 구한 후

2단계에서 GCD로 나누면 

3단계 결과가 나온다.

 

GCD를 구하는 방법은 유클리드 호제법을 활용했다.

이에 대해서는 

https://fall-in-dream.tistory.com/11

 

최대 공약수(GCD), 최소 공배수(LCM) 구하기, 유클리드 호제법 - JAVA

최대 공약수와 최대 공배수의 개념 1) 공약수 두 정수의 공통 약수를 공약수라고 한다. 두 정수 a, b에 대하여 e가 a의 약수이면서 b의 약수일 때 e를 a, b의 공약수라고 한다. 2) 최대공약수 두 정수

fall-in-dream.tistory.com

여길 참고해주세요.

728x90