본문 바로가기
알고리즘/백준

백준 실버5 1676.팩토리얼 0의 개수 성공 (python)

by 개발하는 호랑이 2024. 2. 14.

팩토리얼 0의 개수 성공

풀이

문제가 이해가 되진 않았지만, 우선 팩토리얼값이 필요하니 팩토리얼 구하는 함수를 만들어주고 이를 이용해 줬다.

def factorial(a):
    if a == 0:
        return 1
    else:
        return a * factorial(a-1)

그러고 나서 대입해 보니 무슨 말인지 이해가 되었다.
10!이라면 이 값의 뒤에서 0이 몇 개 있는지 세는 문제이다.
3628800이 10!인데 뒤에 0이 2개 달렸다.
이를 구해주기만 하면 된다.

# N!에서 뒤에서부터 처음 0이 아닌 숫작 ㅏ나올 때까지 0의 갯수를 구하는 프로그램을 작성하시오.
# N이 주어짐

def factorial(a):
    if a == 0:
        return 1
    else:
        return a * factorial(a-1)

N = int(input())
n_fact = str(factorial(N))

answer = 0
for i in range(len(n_fact)-1,-1,-1):
    if n_fact[i] == '0':
        answer += 1
    else:
        break
print(answer)

다른 사람 풀이

백준에서 입력할 땐 시간을 단축하기 위해서

import sys
n = int(sys.stdin.readline())

을 이용한다는 것을 잊고 있었다.
덕분에 다시 생각났다.

문제 푸는 방법은 나와 같았다.

import sys

def factorial(n):
    if n == 0 or n == 1:
        return 1
    else:
        return n*factorial(n-1)

N = int(sys.stdin.readline())

fac = str(factorial(N))
count = 0

for i in range(len(fac), 0, -1):
    if fac[i-1] == '0':
        count += 1
    else:
        break

print(count)