N개의 최소공배수

yejichoi·2023년 5월 23일
0

알고리즘 스터디

목록 보기
60/153
post-thumbnail

N개의 최소공배수

두 수의 최소공배수(Least Common Multiple)란 입력된 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미합니다. 예를 들어 2와 7의 최소공배수는 14가 됩니다. 정의를 확장해서, n개의 수의 최소공배수는 n 개의 수들의 배수 중 공통이 되는 가장 작은 숫자가 됩니다. n개의 숫자를 담은 배열 arr이 입력되었을 때 이 수들의 최소공배수를 반환하는 함수, solution을 완성해 주세요.

제한사항

  • arr은 길이 1이상, 15이하인 배열입니다.
  • arr의 원소는 100 이하인 자연수입니다.

입출력 예

arrresult
[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

모듈을 가져오는(import) 방식

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

0개의 댓글