[Python] 코딩 도장 - 뒤쪽 0의 갯수 구하기

Updated:

코딩 도장 사이트의 문제를 직접 풀어본 내용을 정리하여 올립니다.

코딩 도장에서 여러 문제를 확인할 수 있습니다.

난이도 순으로 차근차근 풀어보려 합니다.


[문제: 뒤쪽 0의 갯수 구하기] - Lv.2

N!의 정의는 다음과 같습니다.

N! = 1 * 2 * 3 * 4 ... N

이때 N!를 정수로 변환 해 뒤에서 부터 연속되는 0의 갯수를 구하세요.

예)

f(12) -> 2 # 12!은 479001600 

f(25) -> 6 # 25!은 15511210043330985984000000

출처: https://codingdojang.com/scode/466?answer_mode=hide


[풀이]

def count_zero(n):
    a = 1
    cnt = 0
    k = 1
    for i in range(1,n+1):
        a *= i

    while True:
        if str(a)[-k] == "0":
            cnt += 1
            k += 1
        else:
            break
    return cnt

count_zero(25)
6

우선 N! 값을 구한 후 문자열로 바꿔 마지막 숫자가 0인 경우 카운트를 증가시키는 while문을 작성하였다.

[추천 풀이]

def zeros(n):
    zeros = 0
    while n > 1:
        zeros += n // 5
        n = n // 5
    
    return zeros

zeros(25)
6

가장 높은 추천 풀이가 파이썬이 아니어서 참고하여 작성하였다.

풀이 설명에 따르면 N!의 뒤쪽 0의 갯수는 5의 승수이며 그 갯수는 N/5의 몫이다.

또한 N!의 숫자 중 5의 배수인데 2번 이상 들어가는 경우 (예: 5 x 5 = 25)를 고려해서 몫을 다시 5로 나눈 몫을 더한다.

0이 나오기 위해선 5와 2가 있어야하고 5전엔 항상 2의 배수들이 나오니 5의 승수를 카운트 한다고 생각했으면 좋았을 것 같다.

Leave a comment