[백준] 팩토리얼 0의 개수
2024. 11. 13. 00:49ㆍ알고리즘, C++
https://www.acmicpc.net/problem/1676
처음 구현할 때는 팩토리얼 함수를 짜고 거기서 F(N) / 10 을 하면서 0이 아닌 값을 구할 생각을 했다.
하지만 N의 값의 범위가 증가할수록 팩토리얼에서 나오는 수는 자료형에 담을 수 없을 정도로 방대해지기에 계산이 불가능.
그 다음으로 접근한 방법은 N / 5이다.
5의 배수가 될 때마다 0의 개수가 늘어나는 것을 발견했고, 이를 이용하고자 했지만 5의 거듭제곱이 나올 때는 0의 개수가 추가로 증가.
조언을 받아 해결한 방법은 각 수가 5의 거듭제곱을 몇 개씩 가지고 있는가를 판별하는 것.
수가 증가함에 따른 결과를 계산하는 것이 아니라 해당하는 N에 대해 5의 거듭제곱 즉 500이하인 5, 25, 125를 몇 개씩 소유하고 있는 지에 대해 구하면 0의 개수가 나오는 문제였다.
이렇게 접근하는 이유는 수에 0이 생긴다는 것은 (현재 숫자 * 10) 을 했다는 것 * 10은 즉 2 * 5이고, 2의 개수보단 5의 개수가 많기 때문에 5를 기준으로 계산해도 * 10 의 개수를 구할 수 있다.
#include <iostream>
using namespace std;
int main()
{
cin.tie(0);
ios::sync_with_stdio(false);
int N;
cin >> N;
cout << N / 5 + N / 25 + N / 125 << endl;
return 0;
}
규칙만 잘 찾는다면 간단한 문제이지만.. 수포자로서 개발자를 해 나가는 건 정말 쉽지 않다..
간단한 규칙임에도 조언이 없었다면 평생 도달하지 못했을 풀이법이다....