Coding test(Python3)/Programmers

[level 2] N개의 최소공배수(최소공배수, 최대공약수 복습)

녜잉 2023. 11. 8. 23:43

문제

두 수의 최소공배수(Least Common Multiple)란 입력된 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미합니다. 예를 들어 2와 7의 최소공배수는 14가 됩니다. 정의를 확장해서, n개의 수의 최소공배수는 n 개의 수들의 배수 중 공통이 되는 가장 작은 숫자가 됩니다. n개의 숫자를 담은 배열 arr이 입력되었을 때 이 수들의 최소공배수를 반환하는 함수, solution을 완성해 주세요.

 

문제 풀이 접근법1

1) 처음 두 개의 수의 최소 공배수를 구한다.

2) 2부터 len(arr)까지 for문을 돌며 arr의 i번째 원소와 1)에서 구한 최소 공배수의 공배수를 구하며 최소 공배수를 업데이트 한다. 

import math
def solution(arr):
    
    lcm = int((arr[0] * arr[1]) / math.gcd(arr[0], arr[1])) 

    for i in range(2, len(arr)):
        lcm = int((arr[i] * lcm) / math.gcd(arr[i], lcm))
        
    return lcm

 

 


최대공약수 복습 

유클리드 호제법(in 파이썬)

def gcd(a, b):
	while b > 0:
        a, b = b, a % b
	
    return a

 

 

최소공배수 복습

lcm(최소공배수) =  ( a * b ) / gcd(a, b)

즉, 두 수의 최소공배수는 두 수를 곱한 수에 두 수의 최대공약수를 나눈 것과 같다. 

def lcm(a, b):

	origin = a * b

	while b < 0:
    	 a, b = b, a% b
         
	return origin / a