def solution(arr):
k = [] ; i = 2
maxx = max(arr)
while i <= maxx :
n = 0
for j in range(len(arr)): #[2, 6, 8, 14]
if arr[j] % i == 0:
n+=1 #2
if n >= 2:
k.append(i)
for j in range(len(arr)):
if arr[j] % i == 0:
arr[j] //= i #[1,3,4,7]
else:
i+=1
answer = 1
for i in k:
answer *= i
for j in arr:
answer *= j
return answer
풀이
초등학생 시절 여러개의 숫자에 대한 최소공배수를 찾는 걸 배울 때, 2개 이상의 숫자에서 같은 약수가 있으면 그 숫자로도 나눠서 최소 공배수를 찾았던 기억이 난다.
2 | 4 6 8 2 | 2 3 4 ----------- = 1 3 2
4,6,8의 최소 공배수 = 2*2*1*3*2 이런거 말이다 !
이거랑 같은 개념으로 코드를 짰다. 근데 이제, 4,6,8은 리스트로, 공배수는 n으로 둔 것만 다르다.
i를 2로 시작한 건 1은 공배수로서 의미가 없었기 때문이고, arr의 원소 중 2개 이상의 원소에서 공배수가 생겼을 때엔 arr 내 해당 원소를 i로 나누었다.
* 해결해야하는 예제는 [4,4]의 기댓값이 4인 것과 [2,3,6]의 기댓값이 6인 것 이 정도였다.