본문 바로가기
알고리즘/백준 알고리즘

[Baekjoon] 백준 알고리즘: 1676 - 팩토리얼 0의 개수

by 며루치꽃 2021. 6. 6.

문제

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

 

1676번: 팩토리얼 0의 개수

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

www.acmicpc.net

내가 생각했던 풀이과정

 

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의 개수를 구할 수 있다.

 

 

댓글