문제
해당 문제는 주어진 배열의 최소공배수를 구해 문제를 해결할 수 있습니다.
최소공배수는 (n1 * n2) / n1과 n2의 최소공약수
공식으로 쉽게 구할 수 있습니다. 이때 최소공약수는 유클리드 호제법을 활용해 도출했습니다.
// 최대 공약수 구하기
public static int getGCD(int n1, int n2) {
if (n1 % n2 == 0) {
return n2;
}
return getGCD(n2, n1%n2);
}
위와 같이 구한 최대공약수를 활용해 탐색하며 마주하는 두 정수에 대해 최소공배수를 도출합니다.
처음 배열을 오름차순으로 정렬했기 때문에 배열 마지막에 할당된 최소공배수를 정답 처리합니다.
import java.util.*;
class Solution {
public int solution(int[] arr) {
Arrays.sort(arr);
// 최소 공배수
for (int i=0; i<arr.length-1; i++) {
int num = getGCD(arr[i+1], arr[i]);
arr[i+1] = (arr[i] * arr[i+1]) / num;
}
return arr[arr.length-1];
}
// 최대 공약수 구하기
public static int getGCD(int n1, int n2) {
if (n1 % n2 == 0) {
return n2;
}
return getGCD(n2, n1%n2);
}
}
피드백 및 개선점은 댓글을 통해 알려주세요😊