[프로그래머스] N개의 최소공배수 (java) Number_Change
2020-01-16
N개의 최소공배수 (programers > lev2 > Number_Change)
문제설명
두 수의 최소공배수(Least Common Multiple)란 입력된 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미합니다. 예를 들어 2와 7의 최소공배수는 14가 됩니다. 정의를 확장해서, n개의 수의 최소공배수는 n 개의 수들의 배수 중 공통이 되는 가장 작은 숫자가 됩니다. n개의 숫자를 담은 배열 arr이 입력되었을 때 이 수들의 최소공배수를 반환하는 함수, solution을 완성해 주세요.
제한 사항
- arr은 길이 1이상, 15이하인 배열입니다.
- arr의 원소는 100 이하인 자연수입니다.
입출력 예
arr | result |
---|---|
[2,6,8,14] | 168 |
[1,2,3] | 6 |
풀이
static int gcd(int m, int n) {
if(m%n==0)
return n;
else
return gcd(n,m%n);
}
static public int solution(int[] arr) {
//GCD를 구해서 그 GCD로 나누어 떨어지는 몫을 곱해주면 LCM이 된다.
if(arr.length == 1)
return arr[0];
else if(arr.length == 2) {
int g = gcd(arr[0], arr[1]);
return g * (arr[0]/g) * (arr[1]/g);
}
else {
int g = gcd(arr[0], arr[1]);
int l= g * (arr[0]/g) * (arr[1]/g);
for(int i=2; i<arr.length; i++) {
g = gcd(l,arr[i]);
l = g * (l/g) * (arr[i]/g);
}
return l;
}
}
후기 (2h)
항상 풀기 꺼려했었던 최대 공약수, 최소 공배수…
- 두 수의 최소공배수 = 최대공약수(g)의 g* a/g * b/g
- 여러 수의 최대 공약수 = 두개 계산하고 그 계산한 수를 다시 다음 수와 최대 공약수 계산
- 여러 수의 최소 공배수 = 두 수의 최대 공약수 구한 후 최소 공배수 계산
tip
- 최대공약수 (GCD)와 최소공배수(LCM)를 구하는 법을 드디어… 다 풀어봤다 이제서야
- 까먹지않도록 복습 철저히 해야겠다