[프로그래머스] 숫자 카드 나누기 by 파이썬

진이·2023년 3월 19일
0

파이썬

목록 보기
6/7

문제 요약

철수와 영희가 숫자 카드를 나눠 갖는데 철수가 가진 수를 모두 나눌 수 있지만 영희가 가진 수를 모두 나눌 수 없거나 그 반대의 경우를 만족하는 수 중에서 가장 큰 수를 구해야 하는 것이다.

문제 해결

최대공약수를 적절히 활용해주면 되는 문제다.
나눌 수 있는 가장 큰 수는 결국 최대공약수를 의미하기 때문이다.

from math import gcd

def solution(arrayA, arrayB):
    setA, setB = set(arrayA), set(arrayB)

    if setA & setB: return 0

    setA, setB = list(setA), list(setB)
    gcdA, gcdB = setA[0], setB[0]
    flagA, flagB = True, True
    
    for el in setA: gcdA = gcd(gcdA, el)
    for el in setB:
        if el % gcdA == 0:
            flagA = False
            break

    for el in setB: gcdB = gcd(gcdB, el)
    for el in setA:
        if el % gcdB == 0:
            flagB = False
            break

    if flagA and flagB: return max(gcdA, gcdB)
    else:
        if flagA: return gcdA
        elif flagB: return gcdB
        else: return 0
profile
최선을 다할게

0개의 댓글