철수와 영희가 숫자 카드를 나눠 갖는데 철수가 가진 수를 모두 나눌 수 있지만 영희가 가진 수를 모두 나눌 수 없거나 그 반대의 경우를 만족하는 수 중에서 가장 큰 수를 구해야 하는 것이다.
최대공약수를 적절히 활용해주면 되는 문제다.
나눌 수 있는 가장 큰 수는 결국 최대공약수를 의미하기 때문이다.
from math import gcd
def solution(arrayA, arrayB):
setA, setB = set(arrayA), set(arrayB)
if setA & setB: return 0
setA, setB = list(setA), list(setB)
gcdA, gcdB = setA[0], setB[0]
flagA, flagB = True, True
for el in setA: gcdA = gcd(gcdA, el)
for el in setB:
if el % gcdA == 0:
flagA = False
break
for el in setB: gcdB = gcd(gcdB, el)
for el in setA:
if el % gcdB == 0:
flagB = False
break
if flagA and flagB: return max(gcdA, gcdB)
else:
if flagA: return gcdA
elif flagB: return gcdB
else: return 0