알고리즘 기초 1/2. 300 - 수학1
1676번. 팩토리얼 0의 개수
const fs = require("fs");
let input = Number(fs.readFileSync("/dev/stdin").toString().trim());
function factorial(num){
if(num === 0 || num === 1){
// BigInt 타입 처리를 위해 숫자 뒤에 n을 붙여준다.
return 1n;
}
return BigInt(num) * factorial(num -1);
}
let result = factorial(input);
let resultArr = String(result).split("");
// 0의 개수를 세기 위한 count
let count = 0;
while(true){
let popedNum = resultArr.pop();
// result 배열에서 pop한 값이 0이라면 count를 증가시키고 다음 pop을 진행
if(popedNum === "0"){
count++;
continue;
}
// result 배열에서 pop한 값이 0이 아니라면 while문을 종료한다
break;
}
console.log(count);
const fs = require("fs");
let input = Number(fs.readFileSync("/dev/stdin").toString().trim());
function factorial(num){
if(num === 0 || num === 1){
return 1;
}
return num * factorial(num -1);
}
let result = factorial(input);
let resultArr = String(result).split("");
// 0의 개수를 세기 위한 count
let count = 0;
while(true){
let popedNum = resultArr.pop();
// result 배열에서 pop한 값이 0이라면 count를 증가시키고 다음 pop을 진행
if(popedNum === "0"){
count++;
continue;
}
// result 배열에서 pop한 값이 0이 아니라면 while문을 종료한다
break;
}
console.log(count);
문제 자체는 어렵지않다.
그치만, 그냥 풀면 코드 상 틀린게 없는데도 오답이 된다.
한 끗 차이로 오답이 발생하는데 그 이유는 바로
BigInt이다.
팩토리얼 연산에 큰 수가 입력되었을 때 결과값이 number 타입으로 처리 가능한 범위를 넘어선다.
그래서 문제가 발생하는 것이다.
그래서 입력되는 숫자를 BigInt 타입으로 바꿔주면 해결된다!