#
문제 설명
철수와 영희는 선생님으로부터
숫자가 하나씩 적힌 카드들을 절반씩 나눠서 가진 후
다음 두 조건 중 하나를 만족하는가장 큰 양의 정수 a의 값
을 구하기
조건
철수가 가진 카드들에 적힌 모든 숫자를 나눌 수 있고
영희가 가진 카드들에 적힌 모든 숫자들 중
하나도 나눌 수 없는 양의 정수 a
영희가 가진 카드들에 적힌 모든 숫자를 나눌 수 있고
철수가 가진 카드들에 적힌 모든 숫자들 중
하나도 나눌 수 없는 양의 정수 a
매개 변수
arrayA
arrayB
반환값
arrayA | arrayB | result |
---|---|---|
[10, 17] | [5, 20] | 0 |
[10, 20] | [5, 17] | 10 |
[14, 35, 119] | [18, 30, 102] | 7 |
const gcd = (n1, n2) => {
let last = n1 % n2;
return n2 === 0 ? n1 : gcd(n2, last);
};
function solution(arrayA, arrayB) {
let answer = 0;
let [gcdA, gcdB] = [arrayA[0], arrayB[0]];
for (let i = 1; i < arrayA.length; i++) {
gcdA = gcd(gcdA, arrayA[i]);
gcdB = gcd(gcdB, arrayB[i]);
}
if (gcdA === 1) gcdA = 0;
if (gcdB === 1) gcdB = 0;
if (!arrayA.some((v) => v % gcdB === 0)) answer = Math.max(answer, gcdB);
if (!arrayB.some((v) => v % gcdA === 0)) answer = Math.max(answer, gcdA);
return answer;
}
풀이
최대공약수와 내장기능을 통해 solution 구하기
- 각각 최대 공약수 gcd 구하기
- 해당 최대공약수가 각각 안 나눠질 때 반환값