class Solution {
public int[] solution(int n, int m) {
int[] answer = new int[2];
int a = 1;
for(int i = 1; i <= Math.min(n, m); i++) {
if(n % i == 0 && m % i == 0) {
a = i;
}
}
int b = 1;
for(int i = Math.max(n, m); i <= n * m; i++) {
if(i % n == 0 && i % m == 0) {
b = i;
break;
}
}
answer[0] = a;
answer[1] = b;
return answer;
}
}
먼저 최대공약수를 저장할 변수 a를 1로 초기화한다. 최대공약수를 구하는 것이기 때문에 반복문은 1부터 n과 m 둘 중에서 작은 수까지 돌리면 된다. 최대공약수가 될 수 있는 가장 큰 수가 n이나 m이기 때문이다. 그리고 n과 m이 i로 나누었을 때 둘다 0이 되는 i를 a에 저장시킨다.
그런 다음 최소공배수를 저장할 변수 b를 1로 초기화한다. 최소공배수를 구하는 것이기 때문에 반복문은 n과 m 둘중에서 큰수부터 n과 m을 곱한수까지 돌리면 된다. 전자는 n이나 m이 나머지수의 약수일 경우이고, 후자는 두 수를 모두 곱해서 공배수를 만들 수 있는 방법이기 때문이다. 그리고나서 i를 n과 m으로 나누었을 때 둘 다 0이 되는 i를 b에 저장시키고 최소공배수이기 때문에 바로 break문으로 반복문을 빠져나온다. 그런 다음 answer에 할당해주면 된다.