title: "[프로그래머스] 숫자 카드 나누기 Python 파이썬 해설 (Level 2) - 이도훈"
cleanUrl: "programmers/135807"
description: "프로그래머스 Level 2 문제 [숫자 카드 나누기]의 풀이를 정리합니다."

문제 설명 및 제한사항

아이디어 및 해결 방법

코드

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

출처

프로그래머스 코딩테스트 연습 https://school.programmers.co.kr/learn/challenges