N개의 최소공배수 문제
https://programmers.co.kr/learn/courses/30/lessons/12953
문제설명
두 수의 최소공배수(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
class Solution {
int gcd(int a, int b) {
if(a % b ==0) {
return b;
}
return gcd(b, a%b);
}
public int solution(int[] arr) {
int answer = arr[0];
for(int i = 1; i < arr.length; i++){
int num = gcd(answer, arr[i]);
answer = answer * arr[i] / num;
}
return answer;
}
}
유클리드 호제법을 활용하여 gcd라는 함수를 만들어 입력받은 두 수의 최대공약수를 구해주었다. ex) int[] arr = {2, 6, 8, 14}
1. 2와 6의 최소공배수 -> 6
2. 2와 6의 최소공배수인 6과 다음 숫자인 8과의 최소 공배수 -> 24
3. 6과 8의 최소공배수인 24와 다음 숫자인 14의 최소 공배수 -> 168
// 반복문을 활용한 방법
int gcd(int a, int b) {
while(b!=0) {
int r=a%b;
a=b;
b=r;
}
return a;
}
// 재귀함수를 사용한 방법
int GCD(int a, int b) {
if(a%b ==0) {
return b;
}
return GCD(b, a%b);
}