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

Donghyun·2024년 8월 9일
0

Code Kata - 파이썬

목록 보기
38/54
post-thumbnail

링크: https://school.programmers.co.kr/learn/courses/30/lessons/12953

문제 설명

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

문제풀이

문제 이해하기:

두 수의 최소공배수를 구하는 문제에서 심화된 버전

목표: n 개의 숫자가 담긴 배열 arr에 대해 이 수들의 최소공배수를 return

내 풀이:

  • 유클리드 호제법을 사용하여 최소공배수를 구하는 함수를 만들고,
  • 최소공배수 함수를 활용해 최대공약수를 구하는 함수를 만든다.
  • 그리고 arr 배열에 대해 첫 번째 요소를 시작으로, 나머지 요소들과 순차적으로 최소공배수를 구하기

최종코드

def gcd(a, b):
    # 최대공약수 구하기
    while b > 0:
        a, b = b, a%b
    
    return a

def lcm(a, b):
    # 최소공배수 구하기 - a*b를 최대공약수로 나누면 최소공배수
    return a*b / gcd(a, b)

def solution(arr):
    # 주어진 배열의 첫 번째 요소를 시작으로, 나머지 요소들과 순차적으로 최소공배수를 구하기
    answer = arr[0]
    for num in arr[1:]:
        answer = lcm(answer, num)
    return int(answer)
profile
데이터분석 공부 일기~!

0개의 댓글