function solution(arrayA, arrayB) {
const arrAMin = arrayA.reduce((prev, curr) => Math.min(prev, curr), 100000000);
const arrBMin = arrayB.reduce((prev, curr) => Math.min(prev, curr), 100000000);
function findA(criterion, compare, minNum) {
for (let i = minNum; i > 0; i--) {
if (criterion.every(n => n % i === 0) && !compare.some(n => n % i === 0)) return i;
}
return 0;
}
return Math.max(findA(arrayA, arrayB, arrAMin), findA(arrayB, arrayA, arrBMin));
}
입력값의 제한은 다음과 같습니다.
각 배열에 대해 이중 for문을 적용하는 건 어렵다고 생각했습니다.
가장 큰 양의 정수 a를 찾기 위해서는 각 배열이 비교 기준이 되는 총 2가지 경우를 따져야 합니다.
가장 큰 양의 정수를 찾는 로직은 다음과 같습니다.
위 로직을 담은 fidnA 함수를 생성했습니다.
마지막으로, 비교 기준을 arrayA로 삼았을 때 findA 함수가 리턴하는 값과 비교 기준을 arrayB로 삼았을 때 findA 함수가 리턴하는 값 중 큰 값을 리턴하면 됩니다.