- 문제 : 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]
'코딩테스트 > 기출' 카테고리의 다른 글
[Summer/Winter Coding(~2018) / 프로그래머스] 12980번 : 점프와 순간이동 (0) | 2022.09.11 |
---|---|
[2017 팁스타운 / 프로그래머스] 12985번 : 예상 대전 (0) | 2022.09.11 |
[스택 / 프로그래머스] 12973번 : 짝지어 제거하기 (0) | 2022.09.11 |
[ / 프로그래머스] 12981번 : 영어 끝말잇기 (0) | 2022.09.09 |
[월간 코드 챌린지 시즌1 / 프로그래머스] 70129번: 이진 변환 반복하기 (0) | 2022.09.08 |