[프로그래머스] N개의 최소공배수

chanyeong kim·2021년 12월 8일
0

프로그래머스

목록 보기
28/51

📩 -->문제설명

두 수의 최소공배수(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

💡 solution(사용언어: python)

from math import gcd
def solution(arr):
    def lcm(x,y):
        return x * y // gcd(x,y)
    while True:
        arr.append(lcm(arr.pop(), arr.pop()))
        if len(arr)==1:
            return arr[0]

👉 설명

  • 두 수의 최대 공약수를 찾아주는 gcd 함수를 가져온다.
  • x, y의 최대 공배수 = x * y // 두 수의 최대공약수
  • arr에서 마지막 2개 숫자의 최소공배수를 구한 후 다시 최소공배수를 구해준다.

처음에 접근한 방식!

cnt=0
while any(answer%i!=0 for i in arr):
    answer=answer*arr[cnt]
    cnt+=1
  • 여기서 answer은 arr의 max 값이다.
  • arr의 요소들 중 하나라도 answer을 나누었을 때 나머지가 0이 아니라면 while 문 안에 코드를 실행하는 방식
  • answer을 arr의 작은 요소로 계속 곱해준다.
  • [1,2,3,4] 라면 24가 나와버린다!

다른 풀이

from fractions import gcd


def nlcm(num):      
    answer = num[0]
    for n in num:
        answer = n * answer / gcd(n, answer)

    return answer
  • 거의 비슷한 방식

🌈 느낀 점

오늘도 힘내보자!

출처: 프로그래머스

오류가 있으면 댓글 달아주세요🙂

0개의 댓글