https://school.programmers.co.kr/learn/courses/30/lessons/135807
def solution(arrayA, arrayB):
def find(k, arr):
for i in range(length):
if arr[i] % k == 0:
return False
return True
def gcd(a, b):
while b:
a, b = b, a % b
return a
length = len(arrayA)
max_a = arrayA[0]
max_b = arrayB[0]
for i in range(1, length):
max_a = gcd(max_a, arrayA[i])
for i in range(1, length):
max_b = gcd(max_b, arrayB[i])
result_a = find(max_a, arrayB)
result_b = find(max_b, arrayA)
if not result_a and not result_b:
return 0
elif result_a and not result_b:
return max_a
elif not result_a and result_b:
return max_b
else:
return max(max_a, max_b)
N개의 수에 대해 최대공약수를 활용하는 문제이다.
N개의 수에 대한 최대공약수를 구하는 방법은 두 수의 최대공약수를 다음 gcd
함수의 인자로 사용하면 된다. 최소공배수 또한 동일한 방식으로 N개의 수에 대해 최소공배수를 구할 수 있다.
# gcd([14, 35, 119]) => 7
max_a = arrayA[0]
for i in range(1, length):
max_a = gcd(max_a, arrayA[i])