https://school.programmers.co.kr/learn/courses/30/lessons/12953
두 수의 최소공배수(Least Common Multiple)란 입력된 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미한다. 최소공배수의 의미를 확장하여 입력된 모든 숫자의 배수 중에 공통이 되는 가장 작은 숫자를 찾으라.
주어지는 숫자가 [2, 4, 6, 8] 일 때, 최소공배수는 2 x 2 x 2 x 3 = 24 이다.
이것을 코드로 작성하는 방법은 2부터 주어지는 숫자 중에서 가장 큰 수까지 1씩 증가시키며 각 요소를 나누었을 때 나누어 떨어지는 경우에 답에 해당 숫자를 곱해준다. 이때 2로 한번 나누어 떨어졌다고헤서 다음 숫자인 3으로 넘어가는 것이 아니라 다시 2로 나누어보며 나누어 떨어지지 않을 때 다음 숫자로 넘어가도록 한다. (2로 한번 나누어져도 다시 2로 나누어질 수 있기 때문에 다시 한 번 나누어준다.)
function solution(arr) {
let result = 1
let ok = false
let repeat = Math.max(...arr)
for(let i = 2; i <= repeat; ) {
arr.map((el, index) => {
if(el % i === 0) {
arr[index] = el / i
ok = true
}
})
if(ok) {
result *= i
ok = false
} else {
i++
}
}
return result;
}
배열의 가장 큰 수의 크기만큼 반복되는 for문을 작성한다.
반복문의 내부에는 2부터 시작하는 변수를 선언하고 1씩 증가하며 배열의 각 요소와 나머지 연산을 진행한다. 나머지 연산의 결과가 0이 되면, 배열에서 해당 요소를 변수로 나누어주고, 최소공배수 결과값에 해당 값을 곱해준다. 이후에 나머지 연산을 위한 변수를 +1 해주지 않고 다시 해당 값으로 나머지 연산을 진행한다. 어떤 수를 곱해서 만드는데 같은 수가 여러 번 반복되어 구성될 수 있기 때문에 나누어지지 않는 경우가 발생할 때 까지 같은 숫자로 나머지 연산을 반복하여 검증하도록 한다.
배열의 요소들이 나누어지지 않는 경우에는 반복문의 나누어줄 변수를 +1을 진행하여 다음 숫자로 비교할 수 있게 한다.
모든 반복이 완료되면 결과값을 반환한다.