문제📖
풀이🙏
- 첫째 줄에 정수 n,m이 들어온다.
- 첫째 줄에 n,m의 조합값 끝자리 0의 개수를 출력하는 프로그램을 작성하라.
-> 조합을 구한 뒤, 뒷자리 0의 연속되는 개수를 출력하면 된다.
-> factorial을 이용해 조합값을 얻은 뒤, while반복문
을 이용해 10으로 나누면서 연속되는 개수를 얻었지만 런타임에러로
인해 실패했다.
-> 10은 2와 5로 이루어져있기 때문에 2와 5의 수를 센 뒤, 더하면 값을 구할 수 있다.
코드💻
런타임에러 코드
import sys
def factorial(num):
if num <= 1:
return num
return factorial(num-1) * num
def solve(n, m):
cnt = 0
if n == m:
return 0
if m == 1:
target = n
else:
target = factorial(n) // (factorial(n-m) * factorial(m))
while True:
if target%10 != 0:
break
target = target / 10
cnt += 1
return cnt
n, m = map(int, input().split())
print(solve(n, m))
정답 코드
def five_count(n):
answer = 0
while n != 0:
n = n // 5
answer += n
return answer
def two_count(n):
answer = 0
while n != 0:
n = n // 2
answer += n
return answer
n, m = map(int, input().split())
if m == 0:
print(0)
else:
print(min(two_count(n)-two_count(m)-two_count(n-m), five_count(n)-five_count(m)-five_count(n-m)))
결과😎
출처 && 깃허브📝
https://www.acmicpc.net/problem/2004
github