Python with 백준
백준 2004번 (큰 숫자의 0 세기)
쌍준
2023. 1. 20. 19:43
(n m)은 n!/{k!(n-k)!}이다.
처음에는 10이 2와 5를 곱한 값임을 이용해 하나씩 반복문으로 돌리며 (n m)에 2와 5가 몇개 들어있는지 파악해보았다.
하지만 시간초과가 나서 n>=m이므로 n!/m!을 m+1부터 n까지의 수를 모두 곱한 값으로 만들어 다시 짜봤다.
또 시간초과가 났다. 아무래도 n과 m에 큰 수가 들어올 수 있어서 반복문으로는 안될 것 같다.
아예 새로운 방법을 공부했다. 예를 들어 25!에 있는 2의 개수를 셀 때 25를 2로 나누어 몫(12)을 모두 변수 two에 담는다.
이 행동의 의미는 2, 4, 6, ---, 24를 한 번씩 센 것이다.
다시 이것을 2로 나누어 몫(6)을 two에 담는다.
이 행동의 의미는 4, 8, 12, ---, 24를 센 것이다.
또 2로 나누어 몫(3)을 two에 담는다.
이 행동의 의미는 8, 16, 24를 센 것이다.
또 2로 나누어 몫(1)을 two에 담는다.
16을 센 것이다.
16에는 2가 4개 들어있으므로 총 4번 세진다. 이제 좀 알겠다.