철수와 영희는 선생님으로부터 숫자가 하나씩 적힌 카드들을 절반씩 나눠서 가진 후, 다음 두 조건 중 하나를 만족하는 가장 큰 양의 정수 a의 값을 구하려고 합니다.
예를 들어, 카드들에 10, 5, 20, 17이 적혀 있는 경우에 대해 생각해 봅시다. 만약, 철수가 [10, 17]이 적힌 카드를 갖고, 영희가 [5, 20]이 적힌 카드를 갖는다면 두 조건 중 하나를 만족하는 양의 정수 a는 존재하지 않습니다. 하지만, 철수가 [10, 20]이 적힌 카드를 갖고, 영희가 [5, 17]이 적힌 카드를 갖는다면, 철수가 가진 카드들의 숫자는 모두 10으로 나눌 수 있고, 영희가 가진 카드들의 숫자는 모두 10으로 나눌 수 없습니다. 따라서 철수와 영희는 각각 [10, 20]이 적힌 카드, [5, 17]이 적힌 카드로 나눠 가졌다면 조건에 해당하는 양의 정수 a는 10이 됩니다.
철수가 가진 카드에 적힌 숫자들을 나타내는 정수 배열 arrayA
와 영희가 가진 카드에 적힌 숫자들을 나타내는 정수 배열 arrayB
가 주어졌을 때, 주어진 조건을 만족하는 가장 큰 양의 정수 a를 return하도록 solution 함수를 완성해 주세요. 만약, 조건을 만족하는 a가 없다면, 0을 return 해 주세요.
제한사항
arrayA
의 길이 = arrayB
의 길이 ≤ 500,000arrayA
의 원소, arrayB
의 원소 ≤ 100,000,000arrayA
와 arrayB
에는 중복된 원소가 있을 수 있습니다.arrayA | arrayB | result |
---|---|---|
[10, 17] | [5, 20] | 0 |
[10, 20] | [5, 17] | 10 |
[14, 35, 119] | [18, 30, 102] | 7 |
from math import gcd
def get_gcd(arr):
g = arr[0]
# 배열을 돌면서 gcd를 구함
for i in range(1,len(arr)):
g = gcd(arr[i],g)
return g
def solution(arrayA, arrayB):
answer = 0
a_gcd = get_gcd(arrayA)
b_gcd = get_gcd(arrayB)
for a in arrayA:
if a % b_gcd == 0:
break
else:
answer = max(b_gcd,answer)
for b in arrayB:
if b % a_gcd == 0:
break
else:
answer = max(a_gcd,answer)
return answer