class Solution {
public int[] solution(int n, int m) {
int[] answer = new int[2];
int big = n > m ? n : m;
int small = n > m ? m : n;
int gcdValue=gcd(big, small);
answer[0]=gcdValue;
answer[1]=(n*m)/gcdValue;
return answer;
}
int gcd(int b, int s) {
if (b % s == 0) {
return s;
} else {
return gcd(s, b % s);
}
}
}
오랜만에 최대공약수 최소공배수 알고리즘을 작성해보았다. 기본적으로 최대공약수 알고리즘을 구현할 때는 유클리드 호제법으로 구현한다. 또한 재귀 혹은 반복을 통해 해당 알고리즘을 구현하는 데 나는 재귀를 이용하여 구현하였다. 재귀를 이용하는 방법은 반복을 이용한 코드보다 깔끔하고 언뜻보기에 성능이 좋아보이지만, 메모리를 많이 잡아먹는 경우도 있으니 주의해야 한다.
그렇지만 해당 알고리즘은 간단한 알고리즘이기 때문에 재귀를 이용하여도 메모리를 그렇게 많이 차지하는 것으로 안보였다 :)