코딩테스트/기출
[연습문제 / 프로그래머스] 12953번 : N개의 최소공배수
ydin
2022. 9. 11. 12:00
- 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/12953
문제 이해
주어진 배열의 원소들의 최소 공배수를 구하는 것이다
풀이 이해
0 인덱스와 1 인덱스의 최소 공배수를 구한 다음 arr에 추가하고
마지막에 원소 하나가 남았을 때 그게 정답이므로 반환해준다
처음에는 각 원소들을 전체의 최대공약수로 나눈 다음 다 곱하고, 마지막에 최대 공약수를 곱하는 방법을 생각했다.
예제에서는 다 정답이 떴지만 테스트에서는 다 실패했다
예외를 생각해보니 [6,12,36]인 경우 정답은 36이지만, 위 풀이대로 라면 72가 출력돼 틀린다
그래서 모든 원소의 최소 공배수를 한번에 구하려고 하기보다 두개의 최소 공배수들을 누적해가면 정답이 나오는 걸 배웠다
- 정답 풀이 :
from math import gcd
def lcm(x,y):
return x * y // gcd(x,y)
def solution(arr):
while True:
arr.append(lcm(arr.pop(), arr.pop()))
if len(arr) == 1:
return arr[0]