본문 바로가기

알고리즘

[Java 알고리즘] GCD / LCM (최대공약수, 최소공배수)

프로그래머스 Lv.2 [N개의 최소공배수]

두 수의 최소공배수(Least Common Multiple)란 입력된 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미합니다. 예를 들어 2와 7의 최소공배수는 14가 됩니다. 정의를 확장해서, n개의 수의 최소공배수는 n 개의 수들의 배수 중 공통이 되는 가장 작은 숫자가 됩니다. n개의 숫자를 담은 배열 arr이 입력되었을 때 이 수들의 최소공배수를 반환하는 함수, solution을 완성해 주세요.

 

입출력 예

arr result
[2,6,8,14] 168
[1,2,3] 6

Sol) 유클리드 호제법을 재귀함수로 구현해서 원소 두개씩 최소공배수를 구해가면 됨.

import java.util.*;

class Solution {
    public int solution(int[] arr) {
        int g=1;
        int answer=arr[0];
        for(int i=1;i<arr.length;i++){
            g=gcd(answer,arr[i]);
            answer=answer*arr[i]/g;
        }
        return answer;
    }
    
    //두 수의 최대공약수 메서드
    public int gcd(int a, int b){
        if(a>=b){
            return a%b==0?b:gcd(b,a%b);
        } else{
            return b%a==0?a:gcd(a,b%a);
        }
    }
}

[Theorem] 유클리드 호제법

a > b 가 정수이고 r 이 a를 b로 나눈 나머지(0<=r<b)라 할 때 a,b의 gcd인 (a,b)는 다음을 만족한다.

(a,b)=(b,r) 

 

[Ex] (1071,1029) = (1029,42) = (42,21) = (21,0) = 21


아 정수론 개 싫어했는데 하필 정수론;;ㅋㅋ ㅠ