코테/프로그래머스
프로그래머스 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
반응형