[Python] 코딩 도장 - 뒤쪽 0의 갯수 구하기
Updated:
코딩 도장 사이트의 문제를 직접 풀어본 내용을 정리하여 올립니다.
코딩 도장에서 여러 문제를 확인할 수 있습니다.
난이도 순으로 차근차근 풀어보려 합니다.
[문제: 뒤쪽 0의 갯수 구하기] - Lv.2
N!
의 정의는 다음과 같습니다.
N! = 1 * 2 * 3 * 4 ... N
이때 N!
를 정수로 변환 해 뒤에서 부터 연속되는 0의 갯수를 구하세요.
예)
f(12) -> 2 # 12!은 479001600
f(25) -> 6 # 25!은 15511210043330985984000000
출처: https://codingdojang.com/scode/466?answer_mode=hide
[풀이]
def count_zero(n):
a = 1
cnt = 0
k = 1
for i in range(1,n+1):
a *= i
while True:
if str(a)[-k] == "0":
cnt += 1
k += 1
else:
break
return cnt
count_zero(25)
6
우선 N!
값을 구한 후 문자열로 바꿔 마지막 숫자가 0인 경우 카운트를 증가시키는 while문을 작성하였다.
[추천 풀이]
def zeros(n):
zeros = 0
while n > 1:
zeros += n // 5
n = n // 5
return zeros
zeros(25)
6
가장 높은 추천 풀이가 파이썬이 아니어서 참고하여 작성하였다.
풀이 설명에 따르면 N!
의 뒤쪽 0의 갯수는 5의 승수이며 그 갯수는 N/5의 몫이다.
또한 N!
의 숫자 중 5의 배수인데 2번 이상 들어가는 경우 (예: 5 x 5 = 25)를 고려해서 몫을 다시 5로 나눈 몫을 더한다.
0이 나오기 위해선 5와 2가 있어야하고 5전엔 항상 2의 배수들이 나오니 5의 승수를 카운트 한다고 생각했으면 좋았을 것 같다.
Leave a comment