[Java/프로그래머스]최대공약수와 최소공배수

-문제설명
두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, 
solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 
그다음 최소공배수를 넣어 반환하면 됩니다. 
예를 들어 두 수 3, 12의 최대공약수는 3, 최소공배수는 12이므로 
solution(3, 12)는 [3, 12]를 반환해야 합니다.

-제한 사항
두 수는 1이상 1000000이하의 자연수입니다.

입출력 예 Image with caption

최소공배수 구하는 공식을 잘 몰라서 애를 먹었다.
answer[1] = (minmax); -> answer[1] = (minmax)/answer[0];
이렇게 바꾸니 실행됨

class Solution {
    public int[] solution(int n, int m) {
        int max = 0;
        int min = 0;
        int[] answer = new int[2];
        
        // 정렬
        if(m>n){
            max = m;
            min = n;
        }else{
            max = n;
            min = m;
        }
        
        // 최대공약수
        for(int i=1; i<=max; i++){
            if(min % i == 0 && max % i == 0){
                answer[0] = i;
            }
        }
        
        // 최소공배수
        if(max % min == 0){
            answer[1] = max;
        }else{
            answer[1] = (min*max)/answer[0];
        }

        return answer;
    }
}


int num을 long num으로 바꾸니 실행됐다. 왜지?

class Solution {
    public int solution(long num) {
        int answer = 0;
        
        while(num != 1){
            if(num % 2 == 0){
                num = num / 2;
            }else{
                num = (num*3)+1;
            }
            answer++;
            
            if(answer == 500){
                answer = -1;
                break;
            }
        }
        return answer;
    }
}

Discussion and feedback