문제
N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 N이 주어진다. (0 ≤ N ≤ 500)
출력
첫째 줄에 구한 0의 개수를 출력한다.
예제 입력
10
예제 출력
2
정답 코드
import sys
import math
n = int(sys.stdin.readline())
fac = (str(math.factorial(n)))
count = 0
for i in range(len(fac)):
if fac[len(fac)-i-1] == '0':
count += 1
continue
else: break
print(count)
n의 팩토리얼을 string으로 형변환하고, 뒤에서부터 탐색하도록 하여 '0'이라면 카운트하고 continue, '0'이 아니라면 break 후 카운트를 출력한다.
다른 풀이 (간단한 방법)
import sys
import math
fac = (str(math.factorial(int(sys.stdin.readline()))))
print(len(fac) - len(str(int(fac[::-1]))))
더 간단히 풀 수 있는 코드가 생각나서 추가한다. (실행시간은 같다.)
수를 받아 팩토리얼을 구하고, string으로 형변환한다.
이 문자열을 뒤집고 int형으로 형변환하고 다시 string으로 형변환한다. (ex: 2100 -> 12 가 된다)
뒷부분의 0이 있는 부분만 제거되었으므로, 두 문자열의 길이 차이를 출력한다.

1676번: 팩토리얼 0의 개수
N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오.
www.acmicpc.net
'알고리즘 > 백준' 카테고리의 다른 글
[백준 알고리즘] 11478번: 서로 다른 부분 문자열의 개수 (파이썬 / Python) (0) | 2022.08.11 |
---|---|
[백준 알고리즘] 10816번: 숫자 카드 2 (파이썬 / Python) (0) | 2022.08.11 |
[백준 알고리즘] 1764번: 듣보잡 (파이썬 / Python) (0) | 2022.08.09 |
[백준 알고리즘] 1620번: 나는야 포켓몬 마스터 이다솜 (파이썬 / Python) (0) | 2022.08.09 |
[백준 알고리즘] 1269번: 대칭 차집합 (파이썬 / Python) (0) | 2022.08.09 |