👨‍🏫ps/❄️프로그래머스

[프로그래머스] 숫자 카드 나누기 [python]

peacekim 2023. 4. 22. 23:29
반응형

문제

최대공약수를 구해서, 서로의 배열을 나눌 수 있는지 여부를 구하고 나눌 수 없다면, answer를 나눌 수 있다면, 0을 return 하는 문제이다.

최대공약수를 구할 때 나는 유클리드 호제법을 사용했다.

 

코드

def solution(arrayA, arrayB):
    answer = 0
    if len(arrayA) == 1:
        if arrayA[0] == arrayB[0]:
            return 0
        else:
            return max(arrayA[0], arrayB[0])
    else:
        m1 = 0
        m2 = 0
        gcd1 = gcd(arrayA[0], arrayA[1])
        gcd2 = gcd(arrayB[0], arrayB[1])
        answer = max(m1,m2)
        for i in range(2, len(arrayA)):
            gcd1 = gcd(gcd1, arrayA[i])
            gcd2 = gcd(gcd2, arrayB[i])
        if gcd1 != 1 and canDivide(arrayB, gcd1) == False:
                m1 = gcd1
        if gcd2 != 1 and canDivide(arrayA, gcd2) == False:
                m2 = gcd2
        answer = max(m1,m2)
    return answer

def gcd(a, b):
    
    if b == 0:
        return a
    else:
        if a < b:
            return gcd(a, b % a)
        else:
            return gcd(b, a % b)
        
def canDivide(array, a):
    for i in range(len(array)):
        if array[i] % a == 0:
            return True
    return False
"""
가장 큰 양의 정수 a의 값 구하기
철수가 가진 카드들에 적힌 모든 숫자를 나눌 수 있고, 영희가 가진 카드들에 적힌 모든 숫자들 중 하나도
나눌 수 없는 양의 정수 a
A와 B에 들어있는 약수들 중 겹치지 않고 큰 수
"""
반응형