[프로그래머스]분수의 덧셈
분수의 덧셈
문제 설명
첫 번째 분수의 분자와 분모를 뜻하는 numer1, denom1, 두 번째 분수의 분자와 분모를 뜻하는 numer2, denom2가 매개변수로 주어집니다. 두 분수를 더한 값을 기약 분수로 나타냈을 때 분자와 분모를 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요.
제한사항
0 < numer1, denom1, numer2, denom2 < 1,000
입출력 예
num1 | denom1 | denom2 | num2 | result |
---|---|---|---|---|
1 | 2 | 3 | 4 | [5,4] |
9 | 2 | 1 | 3 | [29,6] |
입출력 예 설명
입출력 예 #1
- 1 / 2 + 3 / 4 = 5 / 4입니다. 따라서 [5, 4]를 return 합니다.
입출력 예 #2
- 9 / 2 + 1 / 3 = 29 / 6입니다. 따라서 [29, 6]을 return 합니다.
나의 풀이 코드
class Solution {
private static int gcd(int a, int b){
if(b == 0)
return a;
return gcd(b, a % b);
}
public int[] solution(int numer1, int denom1, int numer2, int denom2) {
int[] answer = new int[2];
if (0<numer1 && numer1<1000 &&
0<denom1 && denom1<1000 &&
0<numer2 && numer2<1000 &&
0<denom2 && denom2<1000 ){
int denom3 = denom1 * denom2;
int numer3 = (numer1 * denom2) + (numer2 * denom1);
int gcd = gcd(numer3,denom3);
answer[0]= numer3/gcd;
answer[1]= denom3/gcd;
}
return answer;
}
}
마냥 풀다보니 마지막에 분수를 약분을 해야하는데 그러기 위해선 gcd(최대공약수)를 구해야 해서 gcd재귀함수를 만들어서 사용하였다.
배운점
class Solution {
public int[] solution(int denum1, int num1, int denum2, int num2) {
int mother = denum1 * denum2;
int son1 = num1 * denum2;
int son2 = num2 * denum1;
int totalSon = son1 + son2;
for(int i = mother; i >= 1; i--){
if(totalSon % i == 0 && mother % i == 0){
totalSon /= i;
mother /= i;
}
}
int[] answer = {totalSon, mother};
return answer;
}
}
다른 사람이 푼 코드는 내 코드와 달리 기약분수를 만들기 위해 반복문을 사용했다는 것이다.
분모를 i로 두고 하나씩 빼가면서 나눠서 제일 처음 조건을 만족한 i가 최대공약수이며 i로 분자,분모를 모두 나누면서 answer를 구한다.
Leave a comment