[파이썬] 백준 BOJ 1676번 팩토리얼

강준호·2023년 3월 18일
0

초고

n = int(input())
ans =1
cnt = 0
for i in range(1,n+1):
    ans *= i
li = list(str(ans))
li.reverse()
for l in li:
    if l == '0':
      cnt+=1
    else:
        print(cnt)
        break
  • 결과값을 list(str(ans)) 로 쪼개고 이를 리버스 시킨다음 카운트.

개선된 코드 1

n = int(input())
ans = 1
cnt = 0
for i in range(1, n+1):
    ans *= i
for digit in reversed(str(ans)): #for문에서 바로 리버스
    if digit == '0':
        cnt += 1
    else:
        print(cnt)
        break
  • 기존 리스트를 만들고 리버스시켰다면 for 문에서 reversed(str(ans)) 를 사용해 바로 뒤집는다

개선된 코드 2

N = int(input())
print(N//5+N//25+N//125)
  • 다른 사람의 정답을 보고 좀 당황했다..;

  • 결과값 마지막에 0 을 만드는 것은 5.
    N ≤ 500이기 때문에
    그래서 5의 계승(5,25,125)들을 몫으로 나눠보면 0의 개수가 나온다는 풀이..

0개의 댓글