첫 번째 분수의 분자와 분모를 뜻하는
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] |
입출력 예 설명
입출력 예 #1
입출력 예 #2
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;
}
}
이 문제를 해결하기 위해선 원하는 값을 나타나기 위해 분수끼리 더한 후, 최소 공배수를 이용해 결과 값의 크기를 줄여야 하는 문제이다.