BOJ/Baekjun-2004-python


質問する📖



に答える🙏


整数n,mは
  • の第1行に入る.
  • の第1行では、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