프로그래머스 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
아 정수론 개 싫어했는데 하필 정수론;;ㅋㅋ ㅠ
'알고리즘' 카테고리의 다른 글
[Java 알고리즘] 땅따먹기 (DP - 동적 계획법) (0) | 2023.07.19 |
---|---|
[Java 알고리즘] 멀리뛰기 (DP - 동적 계획법) (0) | 2023.07.19 |
[Java 알고리즘] 피보나치 수열 (0) | 2023.06.28 |
[Java 알고리즘] 투 포인터 (연속된 자연수의 합) (0) | 2023.06.28 |