less than 1 minute read

출처

https://school.programmers.co.kr/learn/courses/30/lessons/135807

풀이

from math import gcd

def gcdOf(arr):
    g = arr[0]
    for i in range(1,len(arr)):
        g = gcd(g,arr[i])
    return g

# 이문제는 두수의 최대공약수만 비교를 해보면 된다.
# 왜그럴까?
# arrayA의 최대공약수를 A라고 하자
# arrayB를 값들을 A로 나누어보겟지
# 나누어졌다면 답이 될수가 없어
# 그러면 더 작은 arrayA의 공약수로 a로 시도해보겟다. (A = a*x)
# arrayB 값들을 a로 반드시 나눌수 있다.
# arrayB 중 하나의 값을 b라고 하면 b = A * y = a*x*y 이기 때문이다.
def solution(arrayA, arrayB):
    gcdA, gcdB = gcdOf(arrayA), gcdOf(arrayB)
    answer = 0

    # A의 최대공약수로 B의 모든 원소를 나누어본다.
    for i in range(len(arrayB)):
        if arrayB[i]%gcdA==0:
            break
    # 만약 모두 나눌수없다면 답이 될수 있다.
    else:
        answer = gcdA
    
    # B의 최대공약수로 A의 모든 원소를 나누어본다.
    for i in range(len(arrayA)):
        if arrayA[i]%gcdB==0:
            break
    # 만약 모두 나눌수없다면 답이 될수 있다.
    else:
        answer = max(answer, gcdB)

    return answer

Leave a comment