웹 프로그래밍

[프로그래머스(Programmers)] 최대공약수와 최소공배수 - JAVA 본문

프로그래머스/level1

[프로그래머스(Programmers)] 최대공약수와 최소공배수 - JAVA

B. C Choi 2021. 10. 18. 21:31

 

문제 설명

 

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

 


 

제한 사항

 

두 수는 1이상 1,000,000이하의 자연수 입니다.

 


 

입출력 예 설명

 

입출력 예 #1

위의 설명과 같습니다.

입출력 예 # 2

자연수 2와 5의 최대공약수는 1, 최소공배수는 10이므로 [1, 10]을 리턴해야 합니다.


 

풀이

 

문제를 해결하기 위해 유클리드 알고리즘(호제법)을 알아야 합니다.

https://ko.wikipedia.org/wiki/%EC%9C%A0%ED%81%B4%EB%A6%AC%EB%93%9C_%ED%98%B8%EC%A0%9C%EB%B2%95

 

유클리드 호제법 - 위키백과, 우리 모두의 백과사전

유클리드 호제법(-互除法, Euclidean algorithm) 또는 유클리드 알고리즘은 2개의 자연수 또는 정식(整式)의 최대공약수를 구하는 알고리즘의 하나이다. 호제법이란 말은 두 수가 서로(互) 상대방 수를

ko.wikipedia.org

 

Math.max(a, b) 함수는 두 개의 수 중에 더 큰 것을 반환하게 됩니다.

Math.min(b, c) 함수는 두 개의 수 중에 더 작은 것을 반환하게 됩니다.

class Solution {
    public int[] solution(int n, int m) {
        int[] answer = new int[2];
        
        int bigger = Math.max(n, m); 	// 더 큰 수를 bigger에 담기
        int smaller = Math.min(n, m); 	// 더 작은 수를 smaller에 담기
        
        while(smaller > 0) { 			// 유클리드 알고리즘 참고
            int temp = bigger % smaller;
            bigger = smaller;
            smaller = temp;
        }
        
        answer[0] = bigger;
        answer[1] = (n*m) / answer[0];
        return answer;
    }
}