문제 링크

풀이 과정

전체 코드

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