일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
Tags
- queue
- 데이터엔지니어
- PYTHON
- 프로그래머스
- olap
- 퀵정렬
- deque
- Merge sort
- 챗봇
- 데이터파이프라인
- divide and conquer
- stack
- SQL스터디
- DFS
- 병합정렬
- sql
- Cookies
- OLTP
- Data Engineering
- 고득점KIT
- 백준
- 알고리즘
- 탐색알고리즘
- 웹기초
- 분할정복
- Chatbot
- 데이터엔지니어링
- QuickSort
- BFS
- Sessions
Archives
- Today
- Total
Trey
백준 1676번: 팩토리얼 0의 개수 - 파이썬 본문
백준 1676번: 팩토리얼 0의 개수 (www.acmicpc.net/problem/1676)
💡접근
- 시간 제한 : 2초
- 구해야 하는것은 팩토리얼 결과값의 1의 자리부터 0이 나오지 않는 첫번째 숫자까지 0의 개수를 구하는것이다.
- 단순히 팩토리얼을 다 계산한 다음에 뒤에서부터 0의 개수를 세면 되지 않을까?
- ⚠️ 일단 문제에서 가장 큰 수인 500!의 자릿수는 무려 528이다...
- ⚠️ 역시 파이썬...! Python3.0부터는 int에 사이즈가 없어져서 자료형은 int를 사용해도 될 것 같다.
- 팩토리얼을 계산한 후에 뒤에서 0의 개수를 세는 방법으로 풀겠다.
💡배운점 및 오답원인
- 다른 사람들의 풀이를 보니, Java의 경우 BigInteger를 써야하고 숫자가 크기 때문에 팩토리얼 결과값을 구하기보다는, 소인수분해로 10을 만드는 숫자인 2와 5의 짝 개수를 구하여 문제를 풀었다.
- 그 중에서도, 팩토리얼의 경우 2가 5보다 작기 때문에 5의 개수를 누적합으로 구하여 짧고 간결하게 푼 풀이가 마음에 들었다.
- (참고용) 5의 개수를 누적합으로 구하는 풀이 : https://st-lab.tistory.com/165
💡풀이 코드
import math
n = int(input())
n_factorial = str(math.factorial(n)) # n!
cnt = 0
# 팩토리얼 계산값의 1의 자리부터 처음 0이 아닌 숫자가 나오기까지 0의 개수 카운트
for i in range(len(n_factorial)-1, -1, -1):
if n_factorial[i] == '0':
cnt += 1
else:
break
print(cnt)
'알고리즘 문제 풀이 (Class 3)' 카테고리의 다른 글
백준 1764번: 듣보잡 - 파이썬 (0) | 2021.03.21 |
---|---|
백준 1620번: 나는야 포켓몬 마스터 - 파이썬 (0) | 2021.03.21 |
백준 1541번: 잃어버린 괄호 - 파이썬 (0) | 2021.03.21 |