Python/CoTe

[programmers] 최대공약수와 최소공배수

joannekim0420 2022. 2. 26. 20:00
728x90

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

 

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

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

programmers.co.kr

 

최대 공약수 - 각각 n,m 의 약수 중 공통으로 갖는 공약수에서 최댓값을 갖는 수

최소 공배수 - 각각 n,m 의 공통된 배수 중 가장 최소 값. 

                  

 

 

 

내 코드

def solution(n, m):
    answer = []
    #두 수는 최대 1000000까지라고 했으니까 INF 설정
    INF = 1000000
    
    #각각 m 과 n의 약수를 구한다.
    max_n = [x for x in range(1, n+1) if n%x ==0]
    max_m = [x for x in range(1, m+1) if m%x ==0]
    
    #집합 함수로 최대 공약수 구하기
    answer.append(max(set(max_n)&set(max_m)))
    
    #최소 공배수를 구하는 방법 - 최소 공배수 개념 이용
    answer.append(min(i for i in range(min(n,m),INF,min(n,m)) if i%n==0 and i%m==0))
    return answer

최대 공약수와 최소 공배수의 개념을 이용해 구하는 코드

 

 

파이썬 내장함수 이용해 구하는 코드

def gcd(a, b):
    return b if a % b == 0 else gcd(b, a % b)

def lcm(a, b):
    return int(a * b / gcd(a, b))


def gcdlcm(a, b):
    answer = [gcd(a,b), lcm(a,b)]

    return answer