<문제>
https://www.acmicpc.net/problem/1676
<오답>
N = int(input())
sum = 1
for i in range(1,N+1):
sum *=i
sum1 = list(str(sum))
print(sum1.count('0'))
<정답>
N = int(input())
sum = 1
num = 0
for i in range(1,N+1):
sum *=i
for j in range(len(str(sum))):
if sum%10 !=0:
break
sum//=10
num+=1
print(num)
첫 풀이가 오답인 이유는 sum1의 값에서 0의 개수를 모두 구하려 했다는 이유 때문입니다. 문제의 조건에 맞지 않는 코드입니다. 그래서 처음 0이 아닌 숫자가 나온다면 break 하도록 코드를 바꿔주었습니다.
<보충>
그렇게 오래되진 않았지만 그래도 오랜만의 파이썬이라 헷갈렸던 함수의 쓰임들이 있었습니다.
len() 함수는 정수의 길이를 나타낼 수는 없다. 문자열이나 리스트 튜플 등의 길이를 나타내 준다.
count() 함수도 마찬가지로 정수에서 0의 개수를 찾는 것은 가능하지 않다.
그래서 정수 num = 4545의 길이를 print 하고 싶다면 len(str(num))과 같이 str() 함수를 이용할 수 있다.
https://dojang.io/mod/page/view.php?id=2206
팩토리얼 관련 문제이기에 팩토리얼을 구하는 코드를 어떻게 구현하나 다시 공부해보았습니다.
< math 라이브러리에서 제공하는 팩토리얼 함수 >
import math
N = int(input())
print(math.factorial(N))
<재귀 호출을 이용한 팩토리얼 >
def factorial(n):
if n > 1:
return n * factorial(n-1)
else:
return 1
n = int(input())
print(factorial(n))
https://dojang.io/mod/page/view.php?id=2353