[Java] Programmers - 분수의 덧셈

Jae Chan·2023년 1월 2일
0

Coding-Test

목록 보기
2/10
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 합니다.

해결 🔑

package Programmers_Lv0;

public class Lv0_Programmers07 {
    public int[] solution(int denum1, int num1, int denum2, int num2) {
        int minNum = 0;
        int maxNum = 1000;
        int result0 = 0;
        int result1 = 0;
        int irreFraction = 1; // 최소공배수
        int[] answer = {result0, result1};
        
        if(denum1 >= minNum || denum1 <= maxNum || num1 >= minNum || num1 <= maxNum ||
           denum2 >= minNum || denum2 <= maxNum || num2 >= minNum || num2 <= maxNum) 
           {
                    int parNum  = num1 * num2; // 분모
                    int subNum = denum1 * num2 + denum2 * num1; // 분자

                    for(int i = 1; i <= subNum; i++){
                        // 분자,분모 크기의 나머지 값이 0일 경우 최소공배수 발견.
                        if(parNum % i == 0 && subNum % i == 0){
                            irreFraction = i;
                            answer[0] = subNum / irreFraction; // 분자 결과 값 / 최소공배수
                            answer[1] = parNum / irreFraction; // 분모 결과 값 / 최소공배수
                        }
                    }
                }
        
        return answer;
    }
}

이 문제를 해결하기 위해선 원하는 값을 나타나기 위해 분수끼리 더한 후, 최소 공배수를 이용해 결과 값의 크기를 줄여야 하는 문제이다.

결과 🙋

0개의 댓글