https://school.programmers.co.kr/learn/courses/30/lessons/12953
function solution(arr) {
arr.sort((a,b) => a-b)
let max = arr.pop()
let basu = 0
let i = 1
let count = 0
while(true){
basu = max * i
for (let j = 0 ; j < arr.length; j++){
if(basu % arr[j] === 0) count++
else break
}
if(count === arr.length) return basu
else count = 0
i++
}
}
각각의 변수
arr.sort((a,b) => a-b)
let max = arr.pop() //가장 큰 수
let basu = 0 // 가장 큰 수의 배수
let count = 0 // basu가 되는 요소들의 수
while(true){
basu = max * i
for (let j = 0 ; j < arr.length; j++){
if(basu % arr[j] === 0) count++
else break
}
if(count === arr.length) return basu
else count = 0
i++
}
}
while문은 max값에 곱할 수를 1씩 증가시킨다.for문은 arr의 모든 요소를 나눈 뒤 나머지가 0이면 count를 올리고 아니면 break를 걸어 반복문을 빠져 나온다.if문은 count가 모든 요소의 수와 같으면 최소공배수임으로 return을 해주고, 아니면 count갯수를 초기화 하고 i값을 1올려준다.유클리드의 호제법은 최대공약수를 구하는 방법으로 최소공배수는 비교할 두 값을 곱하고 나누기 최대공약수 ((a*b)/(최대공약수))임을 사용하여 시간을 줄일 수 있는 방식이다.
a = 722 b = 190
722 % 190 = 152
190 % 152 = 38
152 % 38 = 0
최대공약수는 38인 셈이다.
722와 190의 최대공약수는 38이다.
// 유클리드 호제법을 사용하여 최대 공약수 구하기
const gcd = (a, b) => {
while (b > 0) {
let temp = b;
b = a % b;
a = temp;
}
return a;
};
//최소공배수 구하기
const lcm = (a, b) => {
return (a * b) / gcd(a, b);
};
const solution = (arr) => {
let answer = 1;
for (let i = 0; i < arr.length; i++) {
answer = lcm(answer, arr[i]);
}
return answer;
};
// 유클리드 호제법을 사용하여 최대 공약수 구하기
const gcd = (a, b) => {
while (b > 0) {
let temp = b;
b = a % b;
a = temp;
}
return a;
};
const lcm = (a, b) => {
return (a * b) / gcd(a, b);
};
두 수를 곱한 값을 최대공약수에 나누어준다.(gcd 함수 호출)
const solution = (arr) => {
let answer = 1;
for (let i = 0; i < arr.length; i++) {
answer = lcm(answer, arr[i]);
}
return answer;
};