N개의 최소공배수
두 수의 최소공배수(Least Common Multiple)란 입력된 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미합니다. 예를 들어 2와 7의 최소공배수는 14가 됩니다. 정의를 확장해서, n개의 수의 최소공배수는 n 개의 수들의 배수 중 공통이 되는 가장 작은 숫자가 됩니다. n개의 숫자를 담은 배열 arr이 입력되었을 때 이 수들의 최소공배수를 반환하는 함수, solution을 완성해 주세요.
arr | result |
---|---|
[2,6,8,14] | 168 |
[1,2,3] | 6 |
입출력 예시로는 다 맞는데 테케는 다 틀려서... 뭐가 틀린건지를 모르겟다 도저히
import math
def are_coprime(a, b): # 서로소
return math.gcd(a, b) == 1
def solution(arr):
answer = 1
for i in range(1,len(arr)): # 오름차순 정렬필요?
print(i,arr[i-1],arr[i])
if arr[i] % arr[i-1] ==0:
answer *= arr[i]
#print(answer)
elif arr[i] % arr[i-1] != 0 and are_coprime(arr[i], arr[i-1]):
answer *= arr[i]
else:
answer *= (arr[i] / math.gcd(arr[i], arr[i-1]))
return answer
# 앞 요소 % 뒷요소 == 0 이면 뒷요소로 대체
# 안나눠 떨어지고 서로소가 1이면 그냥 곱하라
# 안나눠 떨어지지만 약수가 존재한다면 (요소1)*(요소2 / 약수)
def solution(arr):
from math import gcd # 최대공약수를 구하는 gcd() import
answer = arr[0] # answer을 arr[0]으로 초기화
for num in arr: # 반복문을 처음부터 끝까지 돈다.
#1. (arr[0],arr[1])의 최소공배수를 구한 후 answer에 저장
#2. (#1에서 구한 최소공배수, arr[2])의 최소공배수를 구한 후 answer에 저장
#3. 모든 배열을 돌면서 최소공배수를 구하고, 저장하고 하는 방식을 진행
answer = answer*num // gcd(answer, num)
return answer
math 모듈에서 gcd 함수만 가져옵니다. 이렇게 하면 gcd 함수를 사용할 때 math.gcd()가 아닌 단순히 gcd()로 호출할 수 있습니다. 다른 math 모듈의 함수나 변수들은 직접적으로 가져오지 않습니다.
from math import gcd
result = gcd(12, 18)
print(result) # 출력: 6
math 모듈 전체를 가져옵니다. math 모듈에 있는 모든 함수와 변수를 사용할 수 있습니다. 함수를 사용할 때는 math.함수명() 형식으로 호출
import math
result = math.gcd(12, 18)
print(result) # 출력: 6