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개
결과를 미리 돌려보고 식으로 짧게 압축해버린 거였음.
'인간은 어떻게 배울까' 카테고리의 다른 글
[html/js] onclick 이벤트 처리하는 세가지 방법 (0) | 2023.07.13 |
---|---|
[크롬] 브라우저 주소창에서 검색 안되게 막기 (0) | 2023.07.07 |
[백준-파이썬] 10870번 피보나치 수 5 (브론즈2) (0) | 2023.07.03 |
[서평] 점프 투 파이썬 개정판 2.0 (0) | 2023.07.03 |
[JS] Class. 클래스와 인스턴스 (0) | 2023.06.30 |