본문 바로가기
인간은 어떻게 배울까

[백준-파이썬] 1676번 팩토리얼 0의 개수 (실버5)

by 개발하는 아인 2023. 7. 3.

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

 

1676번: 팩토리얼 0의 개수

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

www.acmicpc.net

def facto(n):
    if n == 0:
        return 1
    return n * facto(n - 1)

arr = list(map(int, list(str(facto(int(input()))))))
arr = arr[::-1]

c = 0
for i in arr:
    if i == 0:
        c += 1
    else: break
print(c)

 

 

숏코드

t=int(input())//5
print(t+t//5+t//25)

 

어떻게 해서 위와 같은 코드가 나왔나 했더니...

1부터 50까지 차례로 숫자를 넣으면서 돌려보니 일정하게 0의 개수가 5개씩 증가한다.

# 팩토리얼 숫자 구하기
def facto(n):
    if n == 0:
        return 1
    return n * facto(n - 1)

# 팩토리얼 1부터 n까지 구해서 최초 연속되는 0의 개수 세기
def countZero(n):
    nums = facto(j)
    arr = list(map(int, list(str(nums))))
    arr = arr[::-1]

    c = 0
    for i in arr:
        if i == 0:
            c += 1
        else: break
    print(f'{nums}: {c}개')
    
# 50번 돌려보기
for j in range(50):
    countZero(j)

<결과>

1: 0개
1: 0개
2: 0개
6: 0개
24: 0개
120: 1개
720: 1개
5040: 1개
40320: 1개
362880: 1개
3628800: 2개
39916800: 2개
479001600: 2개
6227020800: 2개
87178291200: 2개
1307674368000: 3개
20922789888000: 3개
355687428096000: 3개
6402373705728000: 3개
121645100408832000: 3개
2432902008176640000: 4개
51090942171709440000: 4개
1124000727777607680000: 4개
25852016738884976640000: 4개
620448401733239439360000: 4개
15511210043330985984000000: 6개
403291461126605635584000000: 6개
10888869450418352160768000000: 6개
304888344611713860501504000000: 6개
8841761993739701954543616000000: 6개
265252859812191058636308480000000: 7개
8222838654177922817725562880000000: 7개
263130836933693530167218012160000000: 7개
8683317618811886495518194401280000000: 7개
295232799039604140847618609643520000000: 7개
10333147966386144929666651337523200000000: 8개
371993326789901217467999448150835200000000: 8개
13763753091226345046315979581580902400000000: 8개
523022617466601111760007224100074291200000000: 8개
20397882081197443358640281739902897356800000000: 8개
815915283247897734345611269596115894272000000000: 9개
33452526613163807108170062053440751665152000000000: 9개
1405006117752879898543142606244511569936384000000000: 9개
60415263063373835637355132068513997507264512000000000: 9개
2658271574788448768043625811014615890319638528000000000: 9개
119622220865480194561963161495657715064383733760000000000: 10개
5502622159812088949850305428800254892961651752960000000000: 10개
258623241511168180642964355153611979969197632389120000000000: 10개
12413915592536072670862289047373375038521486354677760000000000: 10개
608281864034267560872252163321295376887552831379210240000000000: 10개

결과를 미리 돌려보고 식으로 짧게 압축해버린 거였음.