문제
https://www.acmicpc.net/problem/1676
내가 생각했던 풀이과정
1) math 라이브러리의 팩토리얼을 사용하여 팩토리얼을 구하고 이를 문자열로 바꿉니다.
문자열로 바꾸는 이유는 슬라이싱을 하기 편하기 위함입니다.
2) 문자열을 거꾸로 슬라이싱을 하면서 문자열 '0'이 나오면 count를 +1을 하고,
문자열이 '0'이 아닌 문자가 나오면 바로 반복문을 빠져나오고 프린트를 합니다.
처음에는 뒤에서부터 조건을 못봤던 ㅠㅠ
나의 풀이
import math
N = int(input())
result = str(math.factorial(N))
count = 0
for i in range(1, len(result)+1):
if result[-i] == '0':
count += 1
else:
break
print(count)
다른 사람의 풀이
N = int(input())
ans = 0
# 주어진 범위가 500이기때문에 125까지만 생각하면 된다.
for i in range(2, N + 1):
if i % 5 == 0: ans += 1
if i % 25 == 0: ans += 1
if i % 125 == 0: ans += 1
print(ans)
뒤에 0이있다는 말은 곧 이 수가 10으로 곱해진 수가 있다는 것을 의미합니다.
10의 개수를 구하는 방법은 곧 2와 5의 개수를 구하는 것입니다.
뒷자리가 0이 나오는 경우는 2를 곱했을 때, 5를 곱했을 때, 10을 곱했을 때 나오기 때문에 5를 곱했을때의 갯수를 구하면 0의 개수를 구할 수 있다.
'알고리즘 > 백준 알고리즘' 카테고리의 다른 글
[Baekjoon] 백준 알고리즘: 1302 - 베스트셀러 (2) | 2021.06.14 |
---|---|
[Baekjoon] 백준 알고리즘: 1543 - 문서검색 (0) | 2021.06.07 |
[Baekjoon] 백준 알고리즘: 1057 - 토너먼트 (0) | 2021.06.02 |
[Baekjoon] 백준 알고리즘: 9012 - 괄호 (0) | 2021.05.25 |
[Baekjoon] 백준 알고리즘: 11866 - 요세푸스 문제 0 (0) | 2021.05.23 |
댓글