<프로그래머스 문제풀이>
해답)
import functools
import sys
sys.setrecursionlimit(10 ** 6)
def solution(arr):
def getGCD(a, b):
if a==0:
return b
if a < b:
a, b = b, a
return getGCD(a%b, b)
def getLCM(a, b):
factor = getGCD(a, b)
return int(a*b / factor)
return functools.reduce(getLCM, arr)
풀이)
LCM : 최소공배수
r : 최대공약수
a = r * a'
b = r * b'
LCM = r * a' * b'
따라서 a, b 의 최소공배수 = a * b / r
( LCM = a*b/r)
이를 이용해서 풀면 된다.
0) setreculsionlimit(10**6) => 재귀함수의 깊이 제한을 늘려주기
1) getGCD (최대공약수 구하기)
유명한 알고리즘이다 큰수에서 작은수를 계속 나누는 작업을 나머지가 0 이 될때까지 반복한다.
2) getGCD를 이용해 최소공배수를 구함.
3) 2개 요소씩 배열을 순차적으로 최소공배수를 구해주면 배열의 마지막에는 모든 수의 최소공배수가 되어 있다.
(reduce를 이용해 한번에 계산)
(* 다른 풀이를 보니 파이썬 내장함수에 gcd가 있는데 그걸 써도 된다.)
* 이 문제 및 로고의 저작권은 Programmers에 있습니다.
출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges
728x90
'문제풀이 > Programmers' 카테고리의 다른 글
[프로그래머스💯] 코딩테스트 연습 > 연습문제 > 야근 지수 / Python 문제풀이 (0) | 2020.03.29 |
---|---|
[프로그래머스💯] 코딩테스트 연습 > 연습문제 > 하노이의 탑 / Python 문제풀이 (0) | 2020.03.22 |
[프로그래머스💯] 코딩테스트 연습 > 연습문제 > 핸드폰 번호 가리기 (0) | 2020.03.18 |
[프로그래머스💯] 코딩테스트 연습 > 연습문제 > 멀리 뛰기 > / Python 문제풀이 (2가지방법) (0) | 2020.03.13 |
[프로그래머스💯] 코딩테스트 연습 > 문자열 내림차순으로 배치하기 / Python 문제풀이 (0) | 2020.03.13 |
댓글