-
28번인프런 알고리즘테스트 문제 2020. 9. 2. 16:05
이 방법은
int형이 한계치에 도달하면 동작이 안됨... 오버플로우...
#include<iostream> #include<vector> using namespace std; int main() { int tmp = 0; int max = 0; int cnt = 0; int result = 1; int N = 0; cin >> N; for (int i = 1; i <= N; i++) { result = result * i; } while (1) { tmp = result; tmp = tmp % 10; result = result / 10; if (result == 0) { break; } if (tmp == 0) { cnt++; } else if (tmp != 0) { cnt = 0; } if (max < cnt) { max = cnt; } } cout << max; }
해결방안
모든 수를 곱해서 10으로 나눠 각 자리숫자를 구해 비교하지말고
각 숫자의 소인수분해를 해서 2와 5의 쌍의 갯수를 구하면 해답이 풀린다...
#include<iostream> #include<vector> using namespace std; int main() { int tmp = 0; int j = 0; int N = 0; int result = 1; cin >> N; int t = 0; int f = 0; for (int i = 2; i <= N; i++) { j = 2; tmp = i; while (1) { if (tmp%j == 0) { if (j == 2) { t++; } else if (j == 5) { f++; } tmp = tmp / j; } else j++; if (tmp == 1) { break; } } } if (t > f) { cout << f; } else cout << t; }
'인프런 알고리즘테스트 문제' 카테고리의 다른 글
32번 정렬알고리즘 (0) 2020.09.11 29번 (0) 2020.09.02 27번 (0) 2020.09.02 26번 (0) 2020.08.31 25번 (0) 2020.08.31