BOJ-Algorithm

백준 1676 - 팩토리얼 0의 개수

bellhundred 2022. 1. 9. 01:26

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

 

1676번: 팩토리얼 0의 개수

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

www.acmicpc.net

n = int(input())
result = 1
if n==0:
    print(0)
else:
    for i in range(n):
        result *= n
        n-=1
count = 0
for num in str(result)[::-1]:
    if num == '0':
        count+=1
    else:
        break
print(count)

1. n이 0이면 0!=1이니까 0을 출력하고 끝내게 한다.

2. n이 0이 아니면 우선 n!의 값을 result에 저장한다.

3. 저장된 result를 str형태로 바꾼 뒤 [::-1]의 step값을 주면 문자열을 역순으로 출력할 수 있게 해 준다.

쉽게 말해서 3628800이라면, 0088263으로 출력해 준다는 이야기다.

4. 바꾼 값을 순차적으로 탐색해서, num이 문자열 0이면 count를 1씩 늘려주고 0이 아닌 값이 처음 나오면 반복문을 중단한다.

5. count를 출력한다.

 

라고 제출했는데 틀렸다. 뭘 빼먹었냐면 0인 경우 4번째 줄에서 print 0을 하고, 마지막 줄에서 또 print가 되어서 틀렸다.

올바른 답은

n = int(input())
result = 1
if n==0:
    print(0)
else:
  for i in range(n):
      result *= n
      n-=1
  count = 0
  for num in str(result)[::-1]:
      if num == '0':
          count+=1
      else:
          break
  print(count)

이다.