기본 방법
function solution(arr) {
let answer = 0;
let i = Math.max(...arr);
while (true) {
if (arr.every((ele) => i % ele === 0)) {
answer = i;
break;
}
i++;
}
return answer;
}
최소공배수는 각 요소로 나누었을때 나머지가 0인점을 이용해서
i를 1씩 늘려나가면서 모든 요소가 나눌때 나머지 0 인 i를 구함
i는 최소한 arr의 요소중 제일 큰 값 이상
더 빠른 방법
function lcm(arr) {
return arr.reduce((a, b) => (a * b) / gcd(a, b));
}
function gcd(a, b) {
return a % b ? gcd(b, a % b) : b;
}
// arr가 아니고 2개의 수만 주어졌다면
function lcm(a, b) {
return (a * b) / gcd(a, b);
}
기본 성질을 이용해서 푸는 방법
예를 들어 12와 30의
최대공약수는 6이고
최소공배수는 60이다
6을 구하기위해선 소인수 분해한것중 and부분을
60을 구하기위해선 or부분을 곱하면된다
그러므로 각 인자를 곱한후 최대공약수를 나누면 최소공배수가 된다
'코딩 테스트 > 알고리즘 공부' 카테고리의 다른 글
수학적 지식 모음 (0) | 2022.09.08 |
---|---|
약수 구하기 (0) | 2022.09.05 |
병합 정렬 (Merge Sort) (0) | 2022.06.17 |
셸 정렬 (Shell Sort) (0) | 2022.06.16 |
삽입 정렬 (Insertion Sort) (0) | 2022.06.14 |