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

 

문제 이해 

주어진 배열의 원소들의 최소 공배수를 구하는 것이다

 

풀이 이해

0 인덱스와 1 인덱스의 최소 공배수를 구한 다음 arr에 추가하고

마지막에 원소 하나가 남았을 때 그게 정답이므로 반환해준다 

 

처음에는 각 원소들을 전체의 최대공약수로 나눈 다음 다 곱하고, 마지막에 최대 공약수를 곱하는 방법을 생각했다. 

예제에서는 다 정답이 떴지만 테스트에서는 다 실패했다 

예외를 생각해보니 [6,12,36]인 경우 정답은 36이지만, 위 풀이대로 라면 72가 출력돼 틀린다 

그래서 모든 원소의 최소 공배수를 한번에 구하려고 하기보다 두개의 최소 공배수들을 누적해가면 정답이 나오는 걸 배웠다

 

- 정답 풀이 :

from math import gcd

def lcm(x,y):
    return x * y // gcd(x,y)

def solution(arr):
    while True:
        arr.append(lcm(arr.pop(), arr.pop()))
        if len(arr) == 1:
            return arr[0]

+ Recent posts