간단한 문제였으나, 시간 초과가 몇번 떠서 다시 풀어봐야 했던 문제이다.
import sys
N = int(sys.stdin.readline())
factorial = [x for x in range(1, N+1)]
two_count = 0
five_count = 0
for i in factorial:
while i%5 == 0:
five_count += 1
i == i//5
print(five_count)
처음에는 간단히 5의 개수가 이 팩토리얼 안에 몇개 들어있는지 찾으면 될 것이라 생각했다. (왜냐면 5보다 2가 더 많기 때문에 5의 개수만 세주면 간단히 0의 개수가 나오기 때문이다.) 하지만 이렇게 하니 시간초과가 떠서, 다른 방식으로 해봐야했다:
정답으로 제출한 풀이
import sys
N = int(sys.stdin.readline())
num = 1
for i in range(1, N+1):
num *= i
count = 0
for j in reversed(list(str(num))):
if j == '0':
count += 1
else:
break
print(count)
다르게 생각해낸 방법은 그냥 팩토리얼 연산을 해주고, 숫자를 뒤집어, 뒤에서부터 0의 개수를 세주고, 만약 0이 아닌 숫자가 나오기 시작하면, 이 실행을 멈추고, count
를 출력해주는 것이다.
'알고리즘 테스트 > 백준 문제풀이 및 해설' 카테고리의 다른 글
<백준 문제풀이: 1920번> 파이썬 - 수 찾기 (0) | 2021.01.05 |
---|---|
<백준 문제풀이: 11051번> 파이썬 - 이항 계수 2 (0) | 2020.12.27 |
<백준 문제풀이: 11050번> 파이썬 - 이항 계수 1 (0) | 2020.12.27 |
<백준 문제풀이: 3036번> 파이썬 - 링 (0) | 2020.12.27 |
<백준 문제풀이: 10773번> 파이썬 - 제로 (0) | 2020.12.27 |