[프로그래머스] N개의 최소공배수 (level2, JavaScript)

이민영·2023년 8월 24일

문제

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));
}

느낀점

이전에 풀었던 '분수의 덧셈' 문제에서 조금 더 심화된 문제이다.
유클리드 호제법이랑 최소공배수 식만 알고 있으면 어려운 문제는 아닌거 같다!

profile
Frontend Developer

0개의 댓글