코딩테스트/HackerRank
[HackerRank] Between Two Sets 📌 (여러 수 최대공약수, 최소공배수)
주니어주니
2023. 4. 10. 19:51
문제
a배열의 최소공배수의 배수이면서 b배열의 최대공약수의 약수인 수(?) 의 개수
내 풀이
여러 수의 최소공배수, 최대공약수 구하는 방법은 쫌 찾아봤슴다
private static int getTotalX(List<Integer> a, List<Integer> b) {
// a배열의 최소공배수
int aLCD = a.get(0);
for(int i=1; i < a.size(); i++) {
aLCD = LCD(aLCD, a.get(i));
}
// b배열의 최대공약수
int bGCD = b.get(0);
for(int i=1; i < b.size(); i++) {
bGCD = GCD(bGCD, b.get(i));
}
// a배열의 최소공배수의 배수이면서 b배열의 최대공약수의 약수
int answer = 0;
for(int i=1; i<=100; i++) {
if(i % aLCD == 0 && bGCD % i == 0)
answer ++;
}
return answer;
}
// 최대공약수
public static int GCD(int num1, int num2) {
if(num1 % num2 == 0) {
return num2;
}
return GCD(num2, num1%num2);
}
// 최소공배수
public static int LCD(int num1, int num2) {
return num1 * num2 / GCD(num1, num2);
}
📌 여러 수 최대공약수, 최소공배수 구하기
GCD, LCD 함수를 정의했다고 할 때,
1) 일단 배열의 첫번째 값으로 초기화
2) 초기화한 값과 i번째 값 비교 (i = 1부터)