N! 최대값 경우의 수가 엄청 크기 떄문에 계산 후에 구할 수 없다.
그렇기에 계산 중에 0이 나오는 경우의 개수를 구하려고한다.
ex) 10! -> 10 9 8 7 6 5 4 3 2 1
0은 2 5의 경우에만 생긴다 그래서 팩토리얼 중에 들어가는
2의 개수 5의 개수를 구하면 된다.
10 -> 1개
8 -> 3개
6 -> 1개
4 -> 2개
2 -> 1개
그래서 10/2 -> 5개 10/4 2개 10/8 1개 이런식으로 위에 식이 풀어진다.
이러한 방법으로 2와 5를 계산하였다.
function solution(n, nums) {
const result = [];
let num2 = 0,
num5 = 0;
nums.map((num) => {
num2 = num5 = 0;
// 2의 개수
for (let j = 2; j <= num; j *= 2) {
num2 += Math.floor(num / j);
}
// 5의 개수
for (let k = 5; k <= num; k *= 5) {
num5 += Math.floor(num / k);
}
// result.push(Math.min(num2, num5));
console.log(Math.min(num2, num5));
});
// console.log(result);
return result;
}
let nums = [3, 60, 100, 1024, 23456, 8735373];
solution(6, nums);
25의 경우의 수를 구하면 됨으로 마지막에 Math.min(2,5)를 하여 25의 개수를 구해서 출력한다.