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

Ogu·2022년 10월 2일
0

프로그래머스

목록 보기
1/1

문제

풀이

public static int[] solution(int n, int m) {
        int[] answer = new int[2];
        int max = Math.max(n, m);
        int min = Math.min(n, m);

        // 최대 공약수 (유클리드 호제법)
        while(min != 0) {
            int r = max % min;
            max = min;
            min = r;
        }

        // 최대 공배수 - 두수의 곱 / 최대공약수
        int gcd = n * m / max;
        answer = new int[]{max, gcd};
        return answer;
    }

설명

최대 공약수 구하기

유클리드 호제법

  • 유클리드 호제법은 두 수의 최대공약수를 구하는 알고리즘 이다.
  • 2개의 자연수 a, b에 대해서 a를 b로 나눈 나머지를 r이라 하면단, a>b), a와 b의 최대공약수는 b와 r의 최대공약수와 같다.
  • MOD연산의 반복 수행 (MOD연산 - 두 값을 나눈 나머지를 구하는 것)
  • 연산 중에 나온 나머지들은 모두 최대공약수 N의 배수인 수이다.

1. 반복문

int GCD(int a, int b){
  int tmp;
  while(b != 0){      //b가 0이 될 때까지
    r = a % b;
    a = b;
    b = r;
  }
  return a;
}

2. 재귀함수

int GCD(int a, int b){
  return b!= 0 ? GCD(b, a % b) : a;
}

최소 공배수 구하기

  • 두 수의 곱 / 최대공약수
profile
私はゲームと日本が好きなBackend Developer志望生のOguです🐤🐤

0개의 댓글