알고리즘 공부/백준

(Python)백준 코딩테스트 연습 - 조합 0의 개수(2004)

HRuler 2023. 5. 26. 16:15

1. 문제

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

 

2004번: 조합 0의 개수

첫째 줄에 정수 $n$, $m$ ($0 \le m \le n \le 2,000,000,000$, $n \ne 0$)이 들어온다.

www.acmicpc.net

2. 풀이

import sys
input = sys.stdin.readline

n, m = map(int, input().split())

twoNum = 0
fiveNum = 0
i = 1
while True:
    i *= 2
#     print("two i :", i)
    if i > n: break
    else: twoNum += ((n // i) - ((n-m) // i))
#     print("twoNum :", twoNum)
# print()
i = 1
while True:
    i *= 5
#     print("five i:", i)
    if i > n: break
    else: fiveNum += ((n // i) - ((n-m) // i))
#     print("fiveNum :", fiveNum)
# print()
i = 1
while True:
#     print("two i :", i)
    i *= 2
    if i > m: break
    else: twoNum -= (m // i)
#     print("twoNum :", twoNum)
# print()
i = 1
while True:
#     print("five i:", i)
    i *= 5
    if i > m: break
    else: fiveNum -= (m // i)
#     print("fiveNum :", fiveNum)
        
# print("twoNum :", twoNum)
# print("fiveNum :", fiveNum)
print(min(twoNum, fiveNum))

3. FeedBack

 - 위 문제는 수학적 사고를 기반으로 코드를 짜는 것이 문제 해결의 포인트였다.

 마지막 자리에 0이 생기기 위한 조건을 생각해보면 2, 5가 몇번 곱해졌는지가 중점이기 때문에, 이같은 생각을 시작으로 문제를 해결했다.