노력에는 지름길이 없으니까요

프로그래머스 - N개의 최소공배수 Python ver. 본문

Python/프로그래머스

프로그래머스 - N개의 최소공배수 Python ver.

데건 2024. 7. 19. 13:48
728x90

 

해결일 언어 레벨 테스트명
20240719 Python level 2  N개의 최소공배수

 

링크 : https://school.programmers.co.kr/learn/courses/30/lessons/12953#

 

 

arr에 있는 모든 수의 최소공배수 구하기

 


 

내 코드

from math import gcd
def solution(arr):
    arr.sort(reverse=True)
    answer = arr[0]
    for i in range(1,len(arr)):
        if answer%arr[i]!=0:
            answer=int(arr[i]*answer/gcd(arr[i],answer))
    return answer

 

코드 설명

최소공배수를 구하는 공식은 외우고 있었다. num1*num2/gcd(num1,num2)

다만, gcd라는 최대공약수를 구하는 메소드는 숫자 두개의 값만을 구하기 때문에, for문을 돌려 arr에 있는 숫자를 두개씩 비교하여 모든 값에 해당하는 최소공배수를 구해야 했다.

따라서 arr[0]를 answer에 넣어두고, 이미 answer의 약수인 경우에는 최소공배수를 구할 필요가 없으니, arr[i]가 answer의 약수가 아닐 때에만 answer와 arr[i]의 최소공배수를 구하게끔 했다.

 

개선점

if와 sort는 할 필요가 없었다 (쓸데없는 단계를 늘림)

생각하는 방식은 옳았던 것 같다!

 

 

베스트 코드

from math import gcd
def nlcm(num):      
    answer = num[0]
    for n in num:
        answer = n * answer / gcd(n, answer)
    return answer

 

 

 

728x90
반응형