프로그래머스_N개의 최소공배수

임정민·2023년 9월 12일
0

알고리즘 문제풀이

목록 보기
95/173
post-thumbnail

프로그래머스 문제입니다. 실전에 대비하기 위해 60분 시간제한을 두고 풀었습니다.

문제

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

[나의 풀이]

⌛ 59분


def min_multi(n1,n2):
    from functools import reduce

    limit = max([n1,n2])

    k = 1
    tmp = 1
    while limit>k :
        k += 1
        if n1%k==0 and n2%k==0:
            tmp = k

    return int(n1*n2/tmp)

def solution(arr):
    from collections import deque

    arr = deque(arr)

    while len(arr)!=1:

        n1 = arr.popleft()
        n2 = arr.popleft()

        arr.appendleft(min_multi(n1,n2))

    return arr.pop()

    

N개의 정수가 있는 리스트에서 최소공배수를 구하는 문제입니다.입력된 리스트를 queue 구조로 바꾸어 앞에 있는 정수 두개의 최소공배수를 구하는 방식입니다. 이때, 두 정수가 공통으로 나누어지는 최대공약수(tmp)를 따로 구하여 해결하였습니다.
🐰🐰🐰

[다른사람의 풀이1]

def solution(arr):
    answer = 0
    n = 1                           
    
    while True:
        answer = max(arr) * n       
        result = True               
        for num in arr:
            if answer % num != 0:   
                result = False      
                break
        if result:                  
            break                   
        n += 1
        
    return answer
    

입력된 리스트에서 가장 큰 수를 기준으로 2배,3배,4배하며 체크하는 방식입니다. 만약 리스트 내의 가장 큰 수가 모두 이외의 정수 요소로 나누어진다면 최대공배수이기 때문에 break하여 답을 구하는 방법입니다.🐷🐷🐷

[다른사람의 풀이2]


def solution(arr):
	# 최대 공약수 라이브러리 import
    from math import gcd
    
    answer = arr[0]                                 

    for num in arr:                                 
        answer = answer*num // gcd(answer, num)     

    return answer
    

저와 같은 접근 방식, 앞 두 자리 최대공약수를 구하여 최소공배수를 순차적으로 구하는 방식입니다. 이때, 최대공약수를 구하기 위해 gcd라는 라이브러리를 활용하여 훨씬 간결한 풀이로 해결한 모습입니다.🐭🐭🐭

감사합니다.

profile
https://github.com/min731

0개의 댓글