
class Solution {
public static int getGCD(int num1, int num2) { // 1
if (num1 % num2 == 0) {
return num2;
}
return getGCD(num2, num1 % num2);
}
public int solution(int[] arr) {
if (arr.length == 1) { // 2
return arr[0];
}
int gcd = getGCD(arr[0], arr[1]); // 3
int lcm = (arr[0] * arr[1]) / gcd; // 4
for (int i = 2; i < arr.length; i++) { // 5
gcd = getGCD(lcm, arr[i]);
lcm = (lcm * arr[i]) / gcd;
}
return lcm;
}
}
유클리드 호제법 <- 이걸 참고하세요
1. 최대공약수 구하는 법
2. arr의 길이가 1이면 arr의 요소 바로 리턴
3. 최대 공약수를 구해주고(gcd)
4. 최소 공배수를 구해준다(lcm)
5. arr을 순회하며 lcm과 arr[i]의 최소 공배수를 구해준다
class NLCM {
public long nlcm(int[] num) {
long answer = num[0], g;
for (int i = 1; i < num.length; i++) {
g = gcd(answer, num[i]);
answer = g * (answer / g) * (num[i] / g);
}
return answer;
}
public long gcd(long a, long b) {
if (a > b)
return (a % b == 0) ? b : gcd(b, a % b);
else
return (b % a == 0) ? a : gcd(a, b % a);
}
public static void main(String[] args) {
NLCM c = new NLCM();
int[] ex = { 2, 6, 8, 14 };
// 아래는 테스트로 출력해 보기 위한 코드입니다.
System.out.println(c.nlcm(ex));
}
}