최대 공약수
, 유클리드 호제법
https://school.programmers.co.kr/learn/courses/30/lessons/135807
import java.util.*;
class Solution {
public int solution(int[] arrayA, int[] arrayB) {
int answer = 0;
Arrays.sort(arrayA);
Arrays.sort(arrayB);
answer = Math.max(answer, calcBigestA(arrayA, arrayB));
answer = Math.max(answer, calcBigestA(arrayB, arrayA));
return answer;
}
public int calcBigestA(int[] arrayA, int[] arrayB) {
int gcd = calcGcd(arrayA);
for(int item : arrayB) {
if(item % gcd == 0) {
return 0;
}
}
return gcd;
}
public int calcGcd(int[] arr) {
int gcd = 1;
for(int i=2; i<=arr[0]; i++) {
boolean flag = true;
for(int j=0; j<arr.length - 1; j++) {
if(arr[j] % i != 0 || arr[j+1] % i != 0) {
flag = false;
break;
}
}
if(flag) {
gcd = i;
}
}
return gcd;
}
}
arrayA
의 길이 = arrayB
의 길이 ≤ 500,000arrayA
의 원소, arrayB
의 원소 ≤ 100,000,000import java.util.*;
class Solution {
public int solution(int[] arrayA, int[] arrayB) {
int answer = 0;
int gcdA = calcGcd(arrayA);
int gcdB = calcGcd(arrayB);
answer = Math.max(answer, calcBigestA(arrayA, arrayB, gcdA));
answer = Math.max(answer, calcBigestA(arrayB, arrayA, gcdB));
return answer;
}
public int calcGcd(int[] arr) {
int gcdValue = arr[0];
for(int i=1; i<arr.length; i++) {
if(gcdValue == 1) {
break;
}
gcdValue = gcd(gcdValue, arr[i]);
}
return gcdValue;
}
public int gcd(int a, int b) {
if(a % b == 0) {
return b;
}
return gcd(b, a % b);
}
public int calcBigestA(int[] arrayA, int[] arrayB, int gcd) {
for(int item : arrayB) {
if(item % gcd == 0) {
return 0;
}
}
return gcd;
}
}
20분
유클리드 호제법에 대해 까먹고 있었는데, 개념 상기하기 좋은 문제였어요!
참고 링크: https://velog.io/@soyeon207/최대공약수GCD-최소공배수LCM-과-유클리드-알고리즘Euclidean-algorithm