Illie
2024.03.11 알고리즘 본문
N개의 최소공배수
https://school.programmers.co.kr/learn/courses/30/lessons/12953
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
나의 풀이
... 너무나도 길어서 따로 못올리지만
'에리토스테네스의 체'를 활용하여
엄청난 노가다를 통해 문제를 풀었다
하지만 유클리드 호제법을 활용하면 더욱 더 쉽게 풀린다고 한다
유클리드 호제법
num1과 num2의 최대공약수는 num2와 'num1에서 num2를 나눈 나머지' 의 최대공약수와 같고,
'num1에서 num2를 나눈 나머지'가 0이라면
그 때의 num2가 num1과 num2의 최대공약수
즉.
GCD(num1, num2) = GCD(num2, num1 % num2)
-> num1 % num2 = 0이라면, 그때의 num2가 최대공약수
접근방법
최대공약수는 유클리드 호제법으로 값을 도출하고
최소공배수는 두 수의 곱을 최대공약수로 나누어주면 된다
풀이
// 최대공약수 구하는 함수
const getGCD = (a, b) => {
if (b === 0) return a;
return getGCD(b, a % b);
}
// 최소공배수 구하는 함수
const getLCM = (a, b) => a * b / getGCD(a, b);
function solution(arr) {
return arr.reduce((a, c, i) => {
if (i === 0) return c;
return getLCM(a, c)
}, 1);
}
'자료구조|알고리즘' 카테고리의 다른 글
[C] 연결리스트 (0) | 2024.09.13 |
---|---|
[JS] 삼각 달팽이 (0) | 2024.09.10 |
2024.02.07 알고리즘 (0) | 2024.02.07 |
2024.02.04 알고리즘 (2) | 2024.02.04 |
2024.01.29 알고리즘 (1) | 2024.01.29 |
Comments