반응형
문제
https://www.acmicpc.net/problem/1676
1676번: 팩토리얼 0의 개수
N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오.
www.acmicpc.net
풀이
Swift에서 팩토리얼을 직접 계산한다면
최대 500!이라는 큰 수를 기본 자료형인 Int로 나타내기는 어려울 것이다.
다른 방법으로 0의 개수를 구해주어야 한다.
가장 먼저 0이 나타나는 n!은 5이다.
5!=5×4×3×2×1=120
5×2=10 이므로 0의 개수가 1인것을 확인할 수 있다.
5이후 다음 n도 모두 0이 1개 이상은 있을 것이다.
따라서 n에 대해 5×2=10가 나오는 횟수를 구해주면 0의 개수를 구할 수 있을 것이다.
2는 짝수에 대해 모두 약수이므로, 2가 나오는 횟수는 따로 고려하지 않고 5의 횟수를 구하면 된다.
10은 그렇다 치고, 100같은 경우는 어떨까?
100! 은 5×2의 횟수가 20번 나올 것이다.
52×22 같은 경우에도 0의 개수를 1번만 체크하게 될 것이다.
따라서 52의 횟수도 구해주어야 한다.
마찬가지로, 53=125의 횟수도 구해주어야 한다.
소스코드
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
let n = Int(readLine()!)! | |
print(n / 5 + n / 25 + n / 125) |
후기
코드만 봤을 때는 엄청 쉬워보일 수 있는 문제
하지만 수학적으로 생각을 해야하는 문제였다.
반응형
'PS > 백준' 카테고리의 다른 글
[BOJ] 백준 18110 solved.ac (Swift) (0) | 2024.02.19 |
---|---|
[BOJ] 백준 10845 큐 (Swift) (0) | 2024.01.07 |
[BOJ] 백준 2609 최대공약수와 최소공배수 (Swift) (0) | 2024.01.03 |
[BOJ] 백준 15829 Hashing (Swift) (2) | 2024.01.03 |
[BOJ] 백준 2751 수 정렬하기 2 (Swift) (0) | 2023.12.31 |