매우 간단해 보이는 최소공배수 문제이지만, 그리 간단하지는 않았다.
def solution(arr):
num = max(arr)
n = 1
arr.sort()
while True:
for i in arr[:-1]:
if (num*n)%i != 0:
n += 1
break
else:
break
return num*n
잘 생각해보면, 최소 공배수도, 주어진 숫자들 중 가장 큰 숫자의 배수이다. 따라서 우선 num
을 배열의 가장 큰 숫자로 지정해주고, n=1
, 그리고 배열을 작은 순서대로 정렬 시켜준다. 다음은 while문
을 사용해서 num*n
, 즉 num
의 배수가 num
보다 작은 배열의 숫자들로 나누어지는지 확인해보는 과정을 거친다. 만약 나누어떨어지지 않는다면, n += 1
을 통해 곱하는 숫자를 1씩 올려주고 다시 while문
을 실행하게끔 한다. 만약 모든 숫자가 나누어떨어지는 num*n
숫자가 나온다면, while문
을 빠져나와주고, num*n
을 되돌려주면 된다.
'알고리즘 테스트 > 프로그래머스 문제풀이 및 해설' 카테고리의 다른 글
<프로그래머스 문제풀이: 이진 변환 반복하기> Level 2 - 파이썬 (0) | 2020.12.20 |
---|---|
<프로그래머스 문제풀이: [연습문제] 최댓값과 최솟값> Level 2 - 파이썬 (0) | 2020.12.18 |
<프로그래머스 문제풀이: 소수 만들기> Level 2 - 파이썬 (0) | 2020.12.17 |
<프로그래머스 문제풀이: [연습문제] 최솟값 만들기> Level 2 - 파이썬 (0) | 2020.12.16 |
<프로그래머스 문제풀이: 올바른 괄호> Level 2 - 파이썬 (0) | 2020.12.14 |