(nm)의 끝자리 0의 개수를 출력하는 프로그램을 작성하시오.
첫째 줄에 정수 n, m (0≤m≤n≤2,000,000,000, n≠0)이 들어온다.
첫째 줄에 (nm)의 끝자리 0의 개수를 출력한다.
25 12
2
//---- 세팅 ----//
const fs = require('fs');
const stdin = (
process.platform === 'linux'
? fs.readFileSync('/dev/stdin').toString()
: `\
25 12
`
).split('\n');
const input = (() => {
let line = 0;
return () => stdin[line++];
})();
//---- 풀이 -----//
const [n, m] = input().split(' ').map(Number);
const getTwoFive = x => {
let five = 0;
let two = 0;
for (let i = 2; i <= x; i *= 2) {
two += parseInt(x / i);
}
for (let i = 5; i <= x; i *= 5) {
five += parseInt(x / i);
}
return [two, five];
};
const [nt, nf] = getTwoFive(n);
const [mt, mf] = getTwoFive(m);
const [nmt, nmf] = getTwoFive(n - m);
const two = nt - mt - nmt;
const five = nf - mf - nmf;
console.log(Math.min(two, five));
이전의 팩토리얼 0의 개수
와 같은 방식으로 풀어준다.
다만 조합의 공식인 nCr = n! / r! * (n-r)!
이므로 n!
에서 사용된 2와 5의 개수를 더하고, r!
과 (n-r)!
에서 사용된 2와 5의 개수는 빼주면 된다.
참고한 블로그 : https://leylaoriduck.tistory.com/513?category=880546