11687번: 팩토리얼 0의 개수
첫째 줄에 M (1 ≤ M ≤ 100,000,000)이 주어진다.
www.acmicpc.net
코드
m = int(input())
def count_zero(n): # 왼쪽 끝 0 개수 구하기
res = 0
while n >= 5:
res += n//5
n //= 5
return res
s, e = 0, int(1e9)
ans = -1
while s <= e:
mid = (s+e)//2
zero = count_zero(mid)
if zero == m:
ans = mid
e = mid-1
elif zero < m:
s = mid+1
else:
e = mid-1
print(ans)
가장 끝의 0이 하나 더 더해지려면 그 수에 10이 곱해지는 방법밖에 없다. 그러므로 n!일때 10이 곱해진 횟수를 구하면 되는데 생각해보면 2보다 더 큰 수인 5가 더 드물게 나오므로 결국 5가 몇 번 곱해졌는지만 구하면 된다.
'문제풀이 > 투포인터' 카테고리의 다른 글
[Python/파이썬] 백준 1253번 좋다 (0) | 2024.06.28 |
---|---|
[Python/파이썬] SW Expert Academy 20728번 공평한 분배 2 (0) | 2024.06.13 |
[Python/파이썬] 백준 2559번 수열 (0) | 2024.01.31 |
[Python/파이썬] 백준 2018번 수들의 합 5 (0) | 2024.01.28 |
[Python/파이썬] 백준 2003번 수들의 합 2 (1) | 2023.12.05 |