최대공약수GCD, 최소공배수LCM

Kylie·2022년 7월 10일
0

프로그래머스 Lv.1

목록 보기
24/69

문제
두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수

n = 3, m = 12, return = [3, 12]
n = 2, m = 5, return = [1, 10]

내 코드

def solution(n, m):
    answer = [0, 0] 
    for i in range(min(n, m), 0, -1):
        if n % i == 0 and m % i == 0:
            answer[0] = i
            break
    for i in range(max(n,m), n*m+1):
        if i % n == 0 and i % m == 0:
            answer[1] = i
            break
    return answer

다른 풀이

def solution(n, m):
    gcd = lambda a,b : b if not a%b else gcd(b, a%b)
    lcm = lambda a,b : a*b//gcd(a,b)
    return [gcd(n, m), lcm(n, m)]

위 풀이가 너무 간단해서 충격받았다,,

python lamda

lamda 매개변수 : 표현식

ex)

>>>(lamda x, y: x+y) (10, 20)
30

최대공약수 GCD (Greateast Common Division) & 최소공배수 LCM (Least Common Multiple)

두 수 A, B의 곱은 최소공배수와 최대공약수의 곱과 같다.
즉, AB = LG
-> L = AB/G = A*B / GCD(A, B)

유클리드 호제법 (Euclidean algorithm)

호제법 : 두 수가 서로 상대방 수를 나누어 원하는 최대공약수를 구하는 방법

(A>B) A를 B로 나눈 나머지를 R이라 할 때,
A와 B의 최대공약수는 B와 R의 최대공약수와 같다.
-> GCD(A, B) = GCD(B, R)

-> B를 R로 나눈 나머지를 계속 새로운 나머지로 나누는 과정을, 나머지가 0이 될 때까지 반복하고 그 때 나누는 수가 최대공약수가 된다.

ex) 365와 24의 최대공약수

365 = 24*15 + 5
 24 = 5*4 + 4
  5 = 4*1 + 1
  4 = 1*4 + 0

-> 최대공약수는 1

profile
딥린이

0개의 댓글