문제

https://www.acmicpc.net/problem/1676

걸린 시간

00 : 53 : 56 실패

풀이

C++

#include <bits/stdc++.h>
#define INF 987654321
using namespace std;

int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    int n;
    cin >> n;
    int ans = 0;
    for(int i = 1; i < n+1; i++){
        if(i%5 == 0) ans++;
        if(i%25 == 0) ans++;
        if(i%125 == 0) ans++;
    }
    cout << ans << "\n";
    return 0;
}

0의 개수가 증가하는 규칙을 찾지 못해 결국 풀이를 보게 된 문제.

2와 5의 곱인 10의 개수에 따라서 0의 개수가 결정된다. 2의 배수는 5의 배수보다 항상 많거나 같으므로 5의 배수만 생각하면 된다. 이 때 5의 제곱수를 꼭 고려해야한다.

스스로 문제를 풀 때 팩토리얼 수를 쭉 나열해 보고 5의 배수마다 0의 개수가 하나씩 증가한다는 규칙을 찾았지만 수학적으로 왜 그런지를 생각해보려 하지 않아서 틀린 것 같다.

참고로 이 문제를 동적 계획법으로도 접근한 풀이가 있어 아래에 첨부했다.

참고

'Baekjoon' 카테고리의 다른 글

Baekjoon 9375번 패션왕 신해빈  (0) 2020.08.28
Baekjoon 2579번 계단 오르기  (0) 2020.08.28
Baekjoon 1780번 종이의 개수  (0) 2020.08.28
Baekjoon 5430번 AC  (0) 2020.08.28
Baekjoon 1541번 잃어버린 괄호  (0) 2020.08.27

댓글