티스토리 뷰

728x90
반응형

 

https://programmers.co.kr/learn/courses/30/lessons/12940

 

코딩테스트 연습 - 최대공약수와 최소공배수

두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의

programmers.co.kr

 

 


 

 

<나의 풀이>

def solution(n, m):
    def gcd(n,m) :
        while(m) :
            n,m = m,n%m
        return n
    def lcm(n,m) :
        return (n*m) // gcd(n,m)
    
    answer = []
    answer.append(gcd(n,m))
    answer.append(lcm(n,m))
    return answer

 

유클리드 호제법을 이용해서 푼 문제.

꼼수로 math 모듈의 gcd,lcm으로 풀려고 했는데 막혔더라😂

 

 

<다른 사람의 풀이>

def gcdlcm(a, b):
    c, d = max(a, b), min(a, b)
    t = 1
    while t > 0:
        t = c % d
        c, d = d, t
    answer = [c, int(a*b/c)]

    return answer

# 아래는 테스트로 출력해 보기 위한 코드입니다.
print(gcdlcm(3,12))
    

# <배운점>
# => max 와 min을 활용한 Euclidean algorithm 이라 신기했다.
728x90
반응형
댓글