N개의 최소공배수
문제 설명
두 수의 최소공배수(Least Common Multiple)란 입력된 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미합니다. 예를 들어 2와 7의 최소공배수는 14가 됩니다. 정의를 확장해서, n개의 수의 최소공배수는 n 개의 수들의 배수 중 공통이 되는 가장 작은 숫자가 됩니다. n개의 숫자를 담은 배열 arr이 입력되었을 때 이 수들의 최소공배수를 반환하는 함수, solution을 완성해 주세요.
제한 사항
- arr은 길이 1이상, 15이하인 배열입니다.
- arr의 원소는 100 이하인 자연수입니다.
입출력 예
arr result [2,6,8,14] 168 [1,2,3] 6
function solution(arr) {
var answer = 0
var i = 1
arr = arr.sort((a,b)=>a-b)
while(true){
var ptr = arr[arr.length-1]
var result = []
for(var j=0; j<arr.length; j++){
result.push((ptr*i)%arr[j])
}
if(result.every(e=> e===0){
answer = ptr*i
break
} else {
i++
}
}
return answer
}
- arr의 가장 큰 수를 뽑는다.
- 1부터 곱해나가며 arr안의 수와 배수관계가 되면 그 수가 최소공배수가 된다.
2-1. 1,2,3, ... 을 계속 곱해나간다.
2-2. arr의 원소들과 나누어 나머지가 모두 0이 되면 그 수는 모든 arr 원소와 배수이면서 최소공배수가 된다.- 이 수를 answer에 담아 return 한다.
또 한번 단순하게 생각하는 사고를 가질 필요성을 느낀 문제.
무식해보여도, 또 생각해보면 이런 무식한 방법을 컴퓨터가 사용하지 누가 사용하겠냐 싶기는 함 ㅋㅋㅋㅋ
나는 어떻게 최소공배수를 구할까, 유클리드 호제법처럼 뭘 또 사용해야 하나 그런 궁리만 했었다 .. ^_ㅠ