BOJ/백준-2004-python

cosmos·2021년 6월 2일
2
post-thumbnail

문제📖

풀이🙏

  • 첫째 줄에 정수 n,m이 들어온다.
  • 첫째 줄에 n,m의 조합값 끝자리 0의 개수를 출력하는 프로그램을 작성하라.
    -> 조합을 구한 뒤, 뒷자리 0의 연속되는 개수를 출력하면 된다.
    -> factorial을 이용해 조합값을 얻은 뒤, while반복문을 이용해 10으로 나누면서 연속되는 개수를 얻었지만 런타임에러로인해 실패했다.
    -> 10은 2와 5로 이루어져있기 때문에 2와 5의 수를 센 뒤, 더하면 값을 구할 수 있다.

코드💻

런타임에러 코드

# boj, 2004 : 조합 0의 개수, python3
# 정수론 및 조합론
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))

정답 코드

# 파이리썬의 파이썬님 코드 참고
#n!의 5 개수 세는 함수
def five_count(n):
    answer = 0
    while n != 0:
        n = n // 5
        answer += n
    return answer

#n!의 2 개수 세는 함수
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

0개의 댓글