문제 링크
LV 2: 숫자 카드 나누기
구현 방식
- 먼저 arrayA의 최대공약수 gcdA, arrayB의 최대공약수 gcdB를 구해줌
- 각각 arrayA와 arrayB를 순회하면서, gcdA가 arrayB의 원소를 나누는 경우가 있으면 flagA를 False로, gcdB가 arrayA의 원소를 나누는 경우가 있으면 flagB를 False로, flagA와 flagB가 둘 다 False라면 return 0
- 구해진 flag에 따라 gcd를 return
코드
import math
def solution(arrayA, arrayB):
N = len(arrayA)
gcdA = 0; gcdB = 0
for i in range(N):
gcdA = math.gcd(gcdA, arrayA[i]); gcdB = math.gcd(gcdB, arrayB[i])
flagA = True; flagB = True
for i in range(N):
if arrayB[i] % gcdA == 0: flagA = False
if arrayA[i] % gcdB == 0: flagB = False
if not flagA and not flagB: return 0
if flagA and flagB: return max(gcdA, gcdB)
elif flagA: return gcdA
elif flagB: return gcdB