문제
https://school.programmers.co.kr/learn/courses/30/lessons/135807
아이디어
- 각 배열
arrayA
와arrayB
의 모든 원소를 나누어 떨어지게 하는 약수 배열divisorsA
과divisorsB
를 만든다. - 자신의 모든 원소를 나누어 떨어지면서, 상대의 모든 원소는 나누어 떨어지지 않는 최대 값을 구한다.
소스코드
// 배열의 모든 원소를 나누어 떨어지게 하는 모든 약수를 구하는 함수
function getDivisors(array) {
const result = [];
for (let i = 1; i <= array[0]; i++) {
if (array.every(v => v % i === 0)) {
result.push(i);
}
}
return result;
}
// 약수 중에서 상대 배열의 모든 원소를 나누어 떨어지지 않게 하는 최대 원소를 구하는 함수
function getMaxResult(divisors, targets) {
let result = 0;
for (let i = 0; i < divisors.length; i++) {
const div = divisors[i];
if (targets.every(v => v % div !== 0)) {
result = div;
break;
}
}
return result;
}
function solution(arrayA, arrayB) {
// arrayA와 arrayB를 오름차순으로 정렬한다.
arrayA = arrayA.sort((a, b) => a - b);
arrayB = arrayB.sort((a, b) => a - b);
// 각각의 배열의 모든 원소가 나눠 떨어지는 값을 기록하고 내림차순 정렬한다.
let divisorsA = getDivisors(arrayA);
let divisorsB = getDivisors(arrayB);
divisorsA = divisorsA.sort((a, b) => b - a);
divisorsB = divisorsB.sort((a, b) => b - a);
// 자신의 모든 원소는 나눠 떨어지면서, 상대의 모든 원소는 나눠 떨어지지 않게 하는 최대 값을 출력한다.
return Math.max(getMaxResult(divisorsA, arrayB), getMaxResult(divisorsB, arrayA));
}