삽집하는 개발들/알고리즘

[101일차] 팩토리얼 0의 개수 - 백준 - 1676(python - 수학)

악투 2023. 12. 20. 12:54
반응형

문제 설명

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

 

입력

첫째 줄에 N이 주어진다. (0 ≤ N ≤ 500)

 

출력

첫째 줄에 구한 0의 개수를 출력한다.

 

예제 입력, 예제 출력

10 2
3 0

 

코드 및 설명

n = int(input())
fact = 1
cnt = 0

for i in range(1, n+1):
  fact *= i
  
fact = str(fact)

for i in range(len(fact)-1, -1, -1):
  if fact[i] == "0":
    cnt += 1
  else:
    break

print(cnt)

 

이 문제는 N의 값을 N!을 구하고, 뒤에서부터 0의 개수가 0이 아닌 수를 만날때까지 세면 되는 문제이다.

 

수학으로 푸는 방식도 있었다.

 

10(2x5)의 개수를 구하는 게 이 문제의 핵심이다. 2의 배수가 5의 배수보다 많기 때문에, 5의 배수의 개수를 세면

 

10의 배수의 개수가 되고, 5의 제곱과 5의 세제곱의 배수는 마찬가기자 된다.

 

N의 범위가 500이기 때문에 5, 25, 125까지의 배수 개수로만 체크하였고 625를 넘어가면 5의 네제곱도 추가해서

 

구해줘야한다.

 

500을 예를 들면 500 // 5 = 100, 500 // 25 = 20 , 500 // 125 = 4 , 100+20+4이므로 124가 된다.

n = int(input())
answer = (n // 5) + (n // 25) + (n // 125)
print(answer)

 

 

반응형