프로그래머스 문제입니다. 실전에 대비하기 위해 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라는 라이브러리를 활용하여 훨씬 간결한 풀이로 해결한 모습입니다.🐭🐭🐭
감사합니다.