[파이썬/python] 프로그래머스 : N개의 최소공배수 (Lv.2)

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

 

처음 풀이

def solution(arr):
    n = []
    for _ in range(len(arr)-1):
        for i in range(1,len(arr)):
            a,b = arr[i-1],arr[i]
            aa,bb = a,b
            while True:
                aa,bb = bb,aa%bb
                if bb == 0 :
                    n.append((a*b)//aa)
                    break
        arr = n
        n = [] 
    return arr[0]

 

 

좀더 깔끔하게 고친거

def solution(arr):
    n = []
    for i in range(len(arr)-1):
        a = arr[0]
        b = arr[i+1]
        while True:
            a,b = b,a%b
            if b == 0 :
                arr[0] = arr[0]*arr[i+1]//a
                break
    return arr[0]

for문을 2번이나 돌릴필요없이 리스트를 딱 한번만 순회해도 답이 나온다

[2,6,8,14]이면, 2와6의 최소공배수를 구하면 6이 나오고

6과 8의 최소공배수를 구하면 24,

24와 14의 최소공배수를 구하면 168이 나온다.

즉 168이 n개의 수의 최소공배수이다.

 

정석적인 풀이인지는 모르겟다.

comment