
첫 번째 분수의 분자와 분모를 뜻하는 numer1, denom1, 두 번째 분수의 분자와 분모를 뜻하는 numer2, denom2가 매개변수로 주어집니다. 두 분수를 더한 값을 기약 분수로 나타냈을 때 분자와 분모를 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요.
| numer1 | denom1 | numer2 | denom2 | result |
|---|---|---|---|---|
| 1 | 2 | 3 | 4 | [5, 4] |
| 9 | 2 | 1 | 3 | [29, 6] |
입출력 예 #1
return 합니다.입출력 예 #2
return 합니다.class Solution {
public int[] solution(int numer1, int denom1, int numer2, int denom2) {
int[] answer = new int[2];
numer1 *= numer2;
numer2 *= numer1;
denom1 *= denom2;
denom2 *= denom1;
answer[0] = numer1 + numer2;
answer[1] = denom2;
for(int i = 2; i < Math.min(denom1, denom2); i++){
if((int)(answer[0] / i) == (answer[0] / i) && (int)(answer[1] / i) == (answer[1] / i)){
answer[0] = answer[0] / i;
answer[1] = answer[1] / i;
}
}
return answer;
}
}
numer1 *= numer2;와 numer2 *= numer1;에서 변수들이 잘못된 코드임. 각 분수의 분자에는 상대for문이 잘못됨. 최대 공약수를 구해야 하는 부분인데, 분자의 합과 공통 분모를 알아야하지만분자의 합과 분모에 대해 구하고 있기 때문임.for문의 최솟값을 구하는데 이것은 최대 공약수를 찾는 것이기에 잘못된 코드임. 공통분모를 찾도록 변경하여야 함.class Solution {
public int[] solution(int numer1, int denom1, int numer2, int denom2) {
int[] answer = new int[2];
int commonDenom = denom1 * denom2;
numer1 *= denom2;
numer2 *= denom1;
int sumNumer = numer1 + numer2;
int find = find(sumNumer, commonDenom);
answer[0] = sumNumer / find;
answer[1] = commonDenom / find;
return answer;
}
private int find(int a, int b) {
while (b != 0) {
int temp = b;
b = a % b;
a = temp;
}
return a;
}
}
commonDenom : 분모를 구하는 식을 초기값으로 지정함.sumNumer : 분자의 합을 구함. find 메소드 : 최대공약수를 구하는 find 메소드를 사용하여 두 분자의 합과 공통 분모의 최대공약수를 구함.answer[1 or 0] : 분자와 분모를 최대공약수로 나누어 기약 분수로 만듦.