1. 팩토리얼 0의 개수 (백준 1676번)
링크
설계가 잘못된 것 같다. 처음엔 짝수 갯수와 5의 배수를 구하고, 이 둘을 곱한 다음 0의 개수를 구하는 방식으로 풀었다가, 계속 안맞는 부분이 있어서 여러 번 코드를 수정해봐도 이상한 답만 나왔다.
결국 맞는지는 잘 모르겠지만, 여러 질문 게시글들을 보고 접근 방식을 바꿔서 풀어보았다.
- 주어진 N을 1부터 순회하며 5의 배수를 찾는다.
- 5의 배수를 5로 나누었을 때 나머지가 0이 안나올 때 까지 5의 배수에 5를 나눈다.
- 총 나눈 횟수를 출력한다.
내 답안
const fs = require("fs");
const input = fs
.readFileSync(process.platform === "linux" ? "/dev/stdin" : "./input.txt")
.toString()
.trim();
const N = Number(input);
const a = Array.from({ length: N }, (_, i) => i + 1).filter(
(i) => i % 2 === 0 && i % 5 !== 0 && i % 10 !== 0
);
const b = Array.from({ length: N }, (_, i) => i + 1).filter((i) => i % 5 === 0);
let count = 0;
for (let i = 0; i < b.length; i++) {
let sum = a[i] * b[i];
while (true) {
sum /= 10;
count += 1;
if (sum % 10 !== 0) break;
}
}
console.log(count);
고친 답안(정답)
const fs = require("fs");
const input = fs
.readFileSync(process.platform === "linux" ? "/dev/stdin" : "./input.txt")
.toString()
.trim();
const N = Number(input);
let count = 0;
for (let i = 1; i <= N; i++) {
let temp = i;
while (temp % 5 === 0) {
temp /= 5;
count++;
}
}
console.log(count);