[파이썬] 백준 1676 : 팩토리얼 0의 개수

728x90

[파이썬] 백준 1676 : 팩토리얼 0의 개수

https://www.acmicpc.net/problem/1676

 

1676번: 팩토리얼 0의 개수

N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오.

www.acmicpc.net

  • 실버 4
  • 수학

접근

입력받은 값이 N일때, N!을 구하고 맨 마지막 수가 0일 때만 특정 변수의 값이 1씩 오르도록 하고 마지막에 그 변수의 값을 출력한다.

 

코드1

 

import sys, math
N = int(sys.stdin.readline())
f = math.factorial(N)
cnt = 0
while True:
    if f % 10 == 0:
        cnt += 1
        f = f // 10
    else:
        print(cnt)
        break

 

math.factorial을 이용하는 것보다 

f = 1
for i in range(1, N+1):
    f *= i

 

이 방법으로 팩토리얼 값을 구하는게 약간 더 빨랐다.

 

10을 나눈 나머지가 0이면 cnt에 1을 증가시키고 f를 10으로 나눈 값을 다시 f에 재할당한다.

 

 

코드 2

 

from math import factorial
n = int(input())
cnt = 0
for x in str(factorial(n))[::-1]:
    if x != '0':
        break
    cnt += 1
print(cnt)

팩토리얼 값을 문자형으로 형변환하고, 반복문을 거꾸로 돌리면서 0일경우 탈출하도록 한다.

 

 

728x90