[기억할 내용들]
- 소인수분해를 이용하여 해결하면 되는 문제이다.
- 일의 자리부터 연속적으로 ‘0’이 몇 개 있는지 구하는 것은 2와 5의 개수를 센 다음 둘 중 더 작은 값을 출력해서 구현할수 있다.
- 일의 자리부터 연속적인 0의 개수는 10이 얼마나 곱해졌나로 판단할 수 있기 때문.
[나의 코드]
#include <iostream>
#include <stdio.h>
#include <string>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
int n;
cin >> n;
vector<int> table(n+1);
int count2 = 0;
int count5 = 0;
for (int i = 2; i <= n; i++) {
int tmp = i;
while (tmp % 2 == 0) {
tmp /= 2;
count2++;
}
while (tmp % 5 == 0) {
tmp /= 5;
count5++;
}
}
cout << ((count2 > count5) ? count5 : count2);
return 0;
}
[강의 코드]
#include <iostream>
#include <stdio.h>
#include <string>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n, i, j, tmp, cnt1 = 0, cnt2 = 0;
scanf_s("%d", &n);
for (i = 2; i <= n; i++) {
tmp = i;
j = 2;
while (1) {
if (tmp % j == 0) {
if (j == 2) cnt1++;
else if (j == 5) cnt2++;
tmp = tmp / j;
}
else j++;
if (tmp == 1) break;
}
}
if (cnt1 < cnt2) printf("%d\n", cnt1);
else printf("%d\n", cnt2);
}
[의견]
강의랑 전반적인 문제풀이 방식이 같아서 기분이 좋았다. 지금까지 문제를 풀면서 계속 느끼는 거지만 나는 수에 대한 개념이 아직 많이 부족한 것 같다. 이게 다 초등학생 때 공부 안 하고 놀기만 해서 그렇다.. 뭐.. 지금부터 계속 하면 늘겠지용!!! 파이팅 하자!!! 일단 오늘은 공부 끝~~~!!! 잘해땅~~~