알고리즘(Algorithm)/프로그래머스(Programmers)

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

나아가는중 2021. 11. 2. 18:17
반응형

프로그래머스 최대공약수와 최소공배수- JAVA


문제 설명

  1. 두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성하라.
  2. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환.
    예를 들어 두 수 3, 12의 최대공약수는 3, 최소공배수는 12이므로 solution(3, 12)는 [3, 12]를 반환.

제한 사항

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

문제 풀이

  1. 최대공약수를 찾기 위해서 유클리드의 호제법을 사용한다.
  2. 유클리드의 호제법을 사용하기 위해 두 수 중 큰 수와 작은 수를 찾아 저장.
  3. 재귀함수 gcd()를 사용하여 최대공약수를 찾는다.
  4. 최소공배수는 두 수를 곱한뒤 최대공약수를 나눔으로 찾을 수 있다.

소스 코드

class Solution {
    public int[] solution(int n, int m) {
        int a = Math.max(n, m);
        int b = Math.min(n, m);

        int gcd = gcd(a, b);

        return new int[]{gcd, a * b / gcd};
    }

    public int gcd(int a, int b) {
        if (a % b == 0) {
            return b;
        }

        return gcd(b, a % b);
    }
}
반응형