알고리즘/백준

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

개발하는 호랑이 2024. 2. 14. 19:29

팩토리얼 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)