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가 몇번 곱해졌는지가 중점이기 때문에, 이같은 생각을 시작으로 문제를 해결했다.
'알고리즘 공부 > 백준' 카테고리의 다른 글
(Python)백준 코딩테스트 연습 - N번째 큰 수(2075) (0) | 2023.06.06 |
---|---|
(Python)백준 코딩테스트 연습 - 오목(2072) (0) | 2023.06.02 |
(Python)백준 코딩테스트 연습 - 상자넣기(1965) (0) | 2023.05.24 |
(Python)백준 코딩테스트 연습 - 최소 힙(1927) (0) | 2023.05.22 |
(Python)백준 코딩테스트 연습 - 연속합(1912) (0) | 2023.05.19 |