코딩테스트 파이썬/파이썬 프로그래머스 2단계
숫자 카드 나누기
세용용용용
2023. 9. 29. 17:20


코딩테스트 연습 - 숫자 카드 나누기 | 프로그래머스 스쿨 (programmers.co.kr)
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
나의 첫번쨰 코드(공약수를 비교해주며 풀었다)
def yasu(num, lenth):
answer = []
for i in range(1, lenth+1):
if num%i == 0:
answer.append(i)
return answer
def solution(arrayA, arrayB):
answer = 0
lenth = min(arrayA)
A_yasu = {}
for i in arrayA:
for j in yasu(i,lenth):
if j not in A_yasu:
A_yasu[j] = 1
else:
A_yasu[j] += 1
lenth = min(arrayB)
B_yasu = {}
for i in arrayB:
for j in yasu(i,lenth):
if j not in B_yasu:
B_yasu[j] = 1
else:
B_yasu[j] += 1
A_same_yasu = []
for i in A_yasu.items():
if i[1] == len(arrayA):
A_same_yasu.append(i[0])
B_same_yasu = []
for i in B_yasu.items():
if i[1] == len(arrayB):
B_same_yasu.append(i[0])
for i in A_same_yasu:
if i not in B_yasu:
answer = max(i, answer)
for i in B_same_yasu:
if i not in A_yasu:
answer = max(i, answer)
#print(answer)
#print(A_same_yasu)
#print(B_same_yasu)
#print(A_yasu)
#print(B_yasu)
return answer
solution( [10, 17], [5,20])

이런 이런
수정된 코드
# 약수 구하는 함수
def yasu(num):
answer = []
for i in range(1, int(num**(1/2))+1):
if num%i == 0:
answer.append(i)
if i**2 != num:
answer.append(num//i)
return answer[1:]
def solution(arrayA, arrayB):
answer = 0
# 젤 작은 수의 약수를 구함
a_yasu = yasu(min(arrayA))
b_yasu = yasu(min(arrayB))
#print(a_yasu)
#print(b_yasu)
# 공약수를 뽑아 낸다
gcp_list = []
for i in a_yasu:
check = 0
for j in arrayA:
if check == 1:
break
if j%i != 0:
check = 1
if check == 0:
gcp_list.append(i)
# 반대편 리스트와 나누어서 나누어 떨어지지 않으면
# answer를 조건에 따라 변경
for i in gcp_list:
check = 0
for j in arrayB:
if check == 1:
break
if j%i == 0:
check = 1
if check == 0:
answer = max(answer, i)
# 위의 경우 반대 케이스로 한번 더 돌려주기
gcp_list1 = []
for i in b_yasu:
check = 0
for j in arrayB:
if check == 1:
break
if j%i != 0:
check = 1
if check == 0:
gcp_list1.append(i)
for i in gcp_list1:
check = 0
for j in arrayA:
if check == 1:
break
if j%i == 0:
check = 1
if check == 0:
answer = max(answer, i)
#print(gcp_list1)
#print(answer)
return answer
solution([14, 35, 119], [18, 30, 102])