본문 바로가기

TIL

240627-(P)최대공약수와 최소공배수

 

 

최대공약수와 최대공배수라......

중학교때 배운 개념인데 이걸 파이썬으로 구축 하려니까 처음에 고민을 좀 했다.

 

고민의 흔적....

 

결국 생각했던것은 각 숫자마자 약수를 구하고 그 약수들간의 최대공약수를 찾은후에 각값을 나눈 몫을 구해서 곱해주면 최대공약수 최대공배수를 구할 수 있다고 설계 완료

 

중간에 set의 경우는 2개의 리스트에서 공통된 값을 가져오고 싶었는데 집합을 사용해 교집합(intersection)을 구하기 위해 활용하였다.

엄청 깔끔하진 않으나 그래도 잘 돌아감에 만족!

 

def solution(n,m):
    answer_n=[]
    for i in range(1,n+1):
        if n%i==0:
            answer_n.append(i)
        else:
            answer_n=answer_n

    answer_m=[]
    for i in range(1,m+1):
        if m%i==0:
            answer_m.append(i)
        else:
            answer_m=answer_m
    answer_n1=set(answer_n)
    answer_m1=set(answer_m)
    z=max(answer_n1.intersection(answer_m1))
    answer = [z, z * n // z * m // z]
    return answer