class Solution {
public int[] solution(int numer1, int denom1, int numer2, int denom2) {
int[] answer = {0, 0};
// 분수의 합 계산
answer[1] = denom1*denom2;
answer[0] = numer1*denom2+numer2*denom1;
// 최대공약수 계산 (유클리드 호제법)
int min = Math.min(answer[0], answer[1]);
int max = 1;
for (int i = min; i >= 1; i--){
if(answer[0] % i == 0 && answer[1] % i == 0){
max = i;
break;
}
}
//값 대입 및 리턴
answer[0] /= max;
answer[1] /= max;
return answer;
}
}
for 반복문으로 푼 코드
유클리드 호제법을 이용한 최대공약수 및 최소공배수 구하는 방법
최대공약수GCD(Greatest Common Divisor) 구하기
2개의 자연수 a, b(a > b)가 있을 때a를 b로 나눈 나머지를 c라고 하면
a와 b의 최대공약수는 b와 c의 최대공약수와 같다.
b를 c로 나눈 나머지 c'를 구하고,
다시 c을 c'로 나눈 나머지를 구하는 과정을 반복하여 -> 재귀
나머지가 0이 되었을 때 나누는 수가 a와 b의 최대공약수
최소공배수LCM(Least Common Multiple) 구하기
두 수 중 어떤 수 하나가 다른 한 수의 약수가 아니면
최소공배수 = a * b /최대공약수
'development > 자료구조, 알고리즘' 카테고리의 다른 글
Time Complexity (0) | 2023.01.19 |
---|---|
23.01.17 Stack, Queue, Tree, Graph (0) | 2023.01.17 |