최대공약수와 최소공배수를 배열에 담아 리턴해야 하는 문제이다.
최소공약수만 구하면 최소공배수는 각 숫자에 최소공배수를 나눈 몫들과 최대공약수를 곱해주면 되기 때문에 최소공배수만 구해주면 된다.
잘 푼 사람들 여기저기 널렸지만 요즘 reduce 함수를 적용해보려고 노력하고 있어서 사용한 김에 기록한다!( ˆᴗˆ )
function solution(n, m) {
let arr = [n, m].sort((a, b) => a - b);
let [smallNum, bigNum] = arr;
let firstGCD = isGCD(smallNum)
let secondGCD = isGCD(bigNum)
let leng = firstGCD.filter(item => secondGCD.includes(item)).length
let GCD = firstGCD.filter(item => secondGCD.includes(item))[leng - 1]
// let GCD = firstGCD.findLast(item => secondGCD.includes(item))
return [GCD, GCD * (bigNum / GCD) * (smallNum / GCD)]
}
const isGCD = (num) => {
return new Array(num + 1).fill('').reduce((acc, _, index) => {
if (num % index === 0) {
acc.push(index)
}
return acc
}, [])
}
(GCD는 최대공약수인데 약수 구하는 함수명을 이렇게 적어버렸다,,,,,, 작명 너무 어렵다!)
참 그리고 findLast는 find 매서드와 같이 값을 리턴하는데 차이점은 마지막에 해당하는 값을 리턴한다. lastIndexOf와 indexOf의 관계랑 비슷하다. 근데 프로그래머스에서는 없는 매서드라고 해서 필터를 통해 값을 구했다.