두 수의 최소공배수(Least Common Multiple)란 입력된 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미합니다. 예를 들어 2와 7의 최소공배수는 14가 됩니다. 정의를 확장해서, n개의 수의 최소공배수는 n 개의 수들의 배수 중 공통이 되는 가장 작은 숫자가 됩니다. n개의 숫자를 담은 배열 arr이 입력되었을 때 이 수들의 최소공배수를 반환하는 함수, solution을 완성해 주세요.
arr | result |
---|---|
[2,6,8,14] | 168 |
[1,2,3] | 6 |
처음에는 arr
을 내림차순으로 정렬한 후, ans
를 arr
의 각 원소로 나눴을 때 나머지가 0이 될 때까지 ans
를 1 증가시키는 방법을 생각했다. 하지만 이 코드의 문제점은 최소공배수를 찾는 방법이라기 보다는 count를 하는 코드라는 점이다. 따라서 예시 코드도 통과하지 못했다.
// 틀린 코드
function solution(arr) {
let ans = 1;
arr
.sort((a, b) => b-a)
.map((e) => {
while (true) {
if (ans % e === 0) break;
console.log(ans)
ans += 1;
}
});
return ans;
}
이후 최소공배수를 반환하는 함수를 따로 작성하였고, ans
의 초기값을 arr[0]
으로 초기화하여 최소공배수를 찾는 방식으로 코드를 작성했다. 어렵게 생각하지 말고 쉽게 생각하면 풀 수 있는 문제였다.
// 최소공배수 찾는 함수
function getLCM(n, m) {
let lcm = 1;
while (true) {
if (lcm % n === 0 && lcm % m === 0) break;
lcm += 1;
}
return lcm;
}
function solution(arr) {
let ans = arr[0];
for (let i = 1; i < arr.length; i++) {
ans = getLCM(ans, arr[i]);
}
return ans;
}