문제
https://school.programmers.co.kr/learn/courses/30/lessons/12953
나의 접근 방식
배열에 있는 모든 수의 최소공배수를 구해야하는데 reduce를 사용해서 두수의 최소공배수를 마지막 인덱스의 숫자까지 계속 더하면 된다.
여기서 최소공배수의 식은 두수의 곱 / 최대공약수 인데 최대공약수는 유클리드 호제법으로 구하면 된다.
[2,6,8,14]를 예를 들면 아래와 같다.
(2 x 6) / 2(최대공약수) => 6 (최소공배수)
(6 x 8) / 2(최대공약수) => 24 (최소공배수)
(24 x 14) / 2(최대공약수) => 168 (모든 수의 최소 공배수)
//유클리드 호제법 (최대공약수)
function gcd(num1, num2) {
if(num2 === 0) return num1;
else return gcd(num2, num1 % num2);
}
// 최소공배수 식 : 두수의 곱 / 최대공약수
function solution(arr) {
return arr.reduce((a, b) => (a * b) / gcd(a, b));
}
느낀점
이전에 풀었던 '분수의 덧셈' 문제에서 조금 더 심화된 문제이다.
유클리드 호제법이랑 최소공배수 식만 알고 있으면 어려운 문제는 아닌거 같다!