동캄의 코딩도장

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

코테/프로그래머스

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

동 캄 2023. 6. 7. 14:14
# 프로그래머스 level2 숫자 카드 나누기
def div(num):
    arr=[]
    for i in range(1,int(num**0.5)+1):
        if num%i==0:
            arr.append(i)
            arr.append(num//i)
    return arr

def solution(arrayA, arrayB):
    min_A=min(arrayA)
    min_B=min(arrayB)
    arr_A=div(min_A)
    arr_B=div(min_B)
    ans_A=[]
    ans_B=[]
    
    for ele_arr_A in arr_A:
        for val_A in arrayA:
            if val_A % ele_arr_A!=0:
                break
        else:
            ans_A.append(ele_arr_A)
    for ele_arr_B in arr_B:
        for val_B in arrayB:
            if val_B % ele_arr_B!=0:
                break
        else:
            ans_B.append(ele_arr_B)
    A_minus_B=set(ans_A)-set(ans_B)
    B_minus_A=set(ans_B)-set(ans_A)
    answer=[]
    for val in A_minus_B:
        for ele_B in arrayB:
            if ele_B % val==0:
                break
        else:
            answer.append(val)
    for val in B_minus_A:
        for ele_A in arrayA:
            if ele_A % val==0:
                break
        else:
            answer.append(val)
    
    if answer:
        return max(answer)
    else:
        return 0

처음에 가장 작은수의 약수를 구할때, 1부터 가장작은수까지 반복문을 실행하며 반복하였는데, 시간초과가 발생하였다.

약수를 구하기위한 코드를 변경하니 해결되었다. (위의 div 함수 참조)

 

 

 

 

시간 초과 div 함수

# def div(num):
#     arr=[]
#     for i in range(2,num+1):
#         if num%i==0:
#             arr.append(i)
#     return arr

 

 

변경 함수

def div(num):
    arr=[]
    for i in range(1,int(num**0.5)+1):
        if num%i==0:
            arr.append(i)
            arr.append(num//i)
    return arr