문제 설명 및 제한사항
아이디어 및 해결 방법
코드
def gcd(a, b):
while b != 0:
a, b = b, a % b
return a
def ngcd(arr):
if len(arr) == 1:
return arr[0]
g = gcd(arr[0], arr[1])
for i in range(2, len(arr)):
g = gcd(g, arr[i])
return g
def divisors(n):
arr = []
for i in range(1, int(n**0.5) + 1):
if n % i != 0:
continue
if i ** 2 == n:
arr.append(i)
else:
arr.append(i)
arr.append(n // i)
arr.sort()
return arr
def solution(arrayA, arrayB):
agcd = ngcd(arrayA)
bgcd = ngcd(arrayB)
adiv = divisors(agcd)
bdiv = divisors(bgcd)
answer = 0
for x in adiv[::-1]:
if all(i % x != 0 for i in arrayB):
answer = max(x, answer)
break
for x in bdiv[::-1]:
if all(i % x != 0 for i in arrayA):
answer = max(x, answer)
break
return answer
Python
복사
출처
프로그래머스 코딩테스트 연습 https://school.programmers.co.kr/learn/challenges