출처: https://meyouus.tistory.com/64 [정보 공유 - For Me For You For Us]
본문으로 바로가기

매우 간단해 보이는 최소공배수 문제이지만, 그리 간단하지는 않았다.

def solution(arr):
    num = max(arr)
    n = 1
    arr.sort()
    while True:
        for i in arr[:-1]:
            if (num*n)%i != 0:
                n += 1
                break
        else:
            break
    return num*n

잘 생각해보면, 최소 공배수도, 주어진 숫자들 중 가장 큰 숫자의 배수이다. 따라서 우선 num을 배열의 가장 큰 숫자로 지정해주고, n=1, 그리고 배열을 작은 순서대로 정렬 시켜준다. 다음은 while문을 사용해서 num*n, 즉 num의 배수가 num보다 작은 배열의 숫자들로 나누어지는지 확인해보는 과정을 거친다. 만약 나누어떨어지지 않는다면, n += 1을 통해 곱하는 숫자를 1씩 올려주고 다시 while문을 실행하게끔 한다. 만약 모든 숫자가 나누어떨어지는 num*n 숫자가 나온다면, while문을 빠져나와주고, num*n을 되돌려주면 된다.