
처음에는 어쩌피 2 3 5 7 (,,,min arr)
으로 나눠지니까 이중의 수로 return 하면 된다고 생각했는데 잘 생각해보니까
max 가 6인경우에는
[18 24 30] > 에서는 max 가 3 인 수가 나온다. 따라서 이렇게 푸면 정답에 근접하지도 않는 문제였다. 최대 공약수를 구하는 과정을 잘못생각한거 같다.
사실 그래서 남들이 푼 것을 봤다.
function solution(arrayA, arrayB) {
arrayA.sort((a, b) => a - b);
arrayB.sort((a, b) => a - b);
// curr은 모두 나누고 target은 모두 나눌 수 없는 최대값을 도출하는 함수 입니다
const findA = (curr, target) => {
for (let i = curr[0]; i > 0; i--) {
if (curr.every((v) => v % i === 0) && !target.some((v) => v % i === 0)) return i;
}
return 0;
};
return Math.max(findA(arrayA, arrayB), findA(arrayB, arrayA));
}
sort 를 한 이유는 내가 생각한대로 자기 자신의 소수로만 나눠지는 수가 존재할수 도 있기 때문에 sort 를 해서 작은수로 나타난다음 하나식 줄이면서
every 함수는 모든 경우를 만족할때 == true 를 내는 함수이고
some()의 경우 1개 요소라도 callback에 대해서 true가 리턴되면 true를 내는 함수로서
만약 나눠진다면 true 가되기때문에 if 문에서 나가게 된다.
이런식으로하면 금방 구해지는 문제였다.