문제 링크
풀이 과정
전체 코드
def get_divisors(val):
divisors = set([val])
for i in range(1, int(val ** 0.5)+1):
if val % i == 0:
divisors.add(i)
divisors.add(int(val//i))
return list(sorted(divisors, reverse=True))
def find_gcd(divisors, arr):
for denom in divisors[:-1]:
flag = True
for val in arr:
if val % denom != 0:
flag = False
break
if flag: return denom
return 1
def is_multiple_gcd(gcd, array):
for val in array:
if val % gcd == 0:
return True
return False
def solution(arrayA, arrayB):
divisorsA = get_divisors(min(arrayA))
divisorsB = get_divisors(min(arrayB))
gcd_a = find_gcd(divisorsA, arrayA)
gcd_b = find_gcd(divisorsB, arrayB)
if not is_multiple_gcd(gcd_a, arrayB) and is_multiple_gcd(gcd_b, arrayA):
return gcd_a
elif is_multiple_gcd(gcd_a, arrayB) and not is_multiple_gcd(gcd_b, arrayA):
return gcd_b
elif not is_multiple_gcd(gcd_a, arrayB) and not is_multiple_gcd(gcd_b, arrayA):
return max(gcd_a, gcd_b)
else:
return 0
Python
복사