분수의 덧셈
날짜 | 2023-03-17 |
사용 언어 | Java |
문제 유형 | 수학 |
정답률 | 61% |
문제 URL | https://school.programmers.co.kr/learn/courses/30/lessons/120808 |
문제 #
문제 설명 #
첫 번째 분수의 분자와 분모를 뜻하는 numer1
, denom1
, 두 번째 분수의 분자와 분모를 뜻하는 numer2
, denom2
가 매개변수로 주어집니다. 두 분수를 더한 값을 기약 분수로 나타냈을 때 분자와 분모를 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요.
제한사항 #
- 0 <
numer1
,denom1
,numer2
,denom2
< 1,000
나의 풀이 #
class Solution {
public int[] solution(int numer1, int denom1, int numer2, int denom2) {
int[] answer = new int[2];
int num_res = 0;
int den_res = 0;
int gcd = 0;
// 분자와 분모를 구한다.
num_res = (numer1*denom2+numer2*denom1);
den_res = denom1*denom2;
// 분자와 분모의 최대공약수로 약분
gcd = gcd(num_res, den_res);
num_res = num_res/gcd;
den_res = den_res/gcd;
answer[0] = num_res;
answer[1] = den_res;
return answer;
}
//최대공약수 구하는 함수
private static int gcd(int a, int b) {
if (b == 0) {
return a;
}
return gcd(b, a%b);
}
}
다른 사람의 풀이 #
class Solution {
public int[] solution(int numer1, int denom1, int numer2, int denom2) {
int denom = denom1 * denom2;
int numer_res1 = denom1 * numer2;
int numer_res2 = denom2 * numer1;
int numer = numer_res1 + numer_res2;
//약분
for(int i = denom; i >= 1; i--){
if(numer % i == 0 && denom % i == 0){
numer /= i;
denom /= i;
}
}
int[] answer = {numer, denom};
return answer;
}
}
관련개념 학습 #
- 유클리드 호제법