첫 번째 분수의 분자와 분모를 뜻하는 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]
: 분자와 분모를 최대공약수로 나누어 기약 분수로 만듦.