첫 번째 분수의 분자와 분모를 뜻하는 numer1, denom1, 두 번째 분수의 분자와 분모를 뜻하는 numer2, denom2가 매개변수로 주어집니다. 두 분수를 더한 값을 기약 분수로 나타냈을 때 분자와 분모를 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요.
나의 풀이
class Solution {
public int[] solution(int numer1, int denom1, int numer2, int denom2) {
int[] answer = new int[2];
int denom = LCM(denom1, denom2);
numer1 = numer1 * (denom / denom1);
numer2 = numer2 * (denom / denom2);
int numer= numer1 + numer2;
int gcd = GCD(denom, numer);
if(gcd == 0){
answer[0] = numer;
answer[1] = denom;
}
else{
answer[0] = numer / gcd;
answer[1] = denom / gcd;
}
return answer;
}
int GCD(int num1, int num2) {
if (num2 == 0) {
return num1;
} else {
return GCD(num2, num1 % num2);
}
}
int LCM(int num1, int num2){
return (num1 * num2) / GCD(num1, num2);
}
}
유클리드 호제법을 이용해서 LCM, GCD를 구한다.
다른 사람의 풀이
class Solution {
public int[] solution(int denum1, int num1, int denum2, int num2) {
int mother = num1 * num2;
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;
}
분모를 num1, num2를 곱해서 만든다. 분자는 상대의 분모 값을 곱해서 만든다. 그리고 각각을 더한다. for문을 이용해서 기약 분수로 만든다.
728x90
'Java' 카테고리의 다른 글
[프로그래머스] 짝수는 싫어요 (0) | 2023.10.31 |
---|---|
[프로그래머스] 최빈값 (0) | 2023.10.31 |
[웹]웹 서버, 웹 애플리케이션 서버 (0) | 2023.09.30 |
[웹] 검증 헤더와 조건부 요청 (0) | 2023.09.24 |
[웹]HTTP 상태 코드 (0) | 2023.09.17 |