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

Walter Mitty·2022년 12월 27일
0

Algorithm

목록 보기
29/29
post-thumbnail

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


제한사항
0 <denum1, num1, denum2, num2 < 1,000


입출력 예

denum1num1denum2num2result
1234[5, 4]
9213[29, 6]

입출력 예 설명
입출력 예 #1

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

입출력 예 #2

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

내 풀이

import java.math.*;

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;
        
        BigInteger b1 = BigInteger.valueOf(denum);
        BigInteger b2 = BigInteger.valueOf(num);
        BigInteger b3 = b1.gcd(b2);
        int gcd = b3.intValue();
        
        answer[0] = denum/gcd;
        answer[1] = num/gcd;
        return answer;
    }
}
  • 기약분수란 단어를 보자마자 최대공약수를 구해야 겠구나 생각을 했다.
    찾아보니 방법이 세가지 정도 있었는데 나는 BigInteger 함수의 gcd() 메서드를 활용하기로 했다.
    단지 int로 사용하려면 .intValue()로 값을 다시 얻어와 줘야했다.

BigInteger 클래스의 메서드
▶︎ gcd() : 최대공약수 찾기
▶︎ intValue() : int 타입으로 형 변환

참고로 최소공배수는
최대공약수를 찾을 때 사용한 두 수를 곱하고 최대공약수로 나누어 주기만 하면 된다.

참고자료: 자바에서 최대공약수 찾기

0개의 댓글