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

박형진·2023년 1월 12일
0

https://school.programmers.co.kr/learn/courses/30/lessons/135807


1. 코드

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)

2. 후기

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])
profile
안녕하세요!

0개의 댓글