[파이썬 풀이] 11687번: 팩토리얼 0의 개수 - 백준

2024. 1. 20. 23:01· 🌀 알고리즘(Algorithm)/백준(문제 풀이)
728x90
반응형

백준 11687번: 팩토리얼 0의 개수

알고리즘 분류: 수학, 정수론, 이분 탐색

파이썬(Python) 풀이

 

링크: https://www.acmicpc.net/problem/11687

문제

가장 끝의 0의 개수가 M개인 N! 중에서 가장 작은 N을 찾는 프로그램을 작성하시오.


입력

첫째 줄에 M (1 ≤ M ≤ 100,000,000)이 주어진다.


출력

가장 끝의 0의 개수가 M개인 N! 중에서 가장 작은 N을 출력한다. 그러한 N이 없는 경우에는 -1을 출력한다.


풀이

예를 들어 1이 입력되면 0의 개수가 1개인 N은 5이다( 5! = 120이기 때문)

그러면 2가 입력된다면 0의 개수가 2개이므로 N은 10이 된다 ( 10! = 3628800이기 때문)

 

여기까지만 본다면 M과 N의 관계는 M * 5 = N과 같이 보일 것이다.

하지만 M이 5인 경우에는 N은 -1이다. 그 이유는 0의 개수가 4개에서 6개로 바로 올라가기 때문이다.

 

그렇다면 어떻게 접근해야할까?

먼저, 0을 만드는 숫자는 2와 5이다.

그래서 N이 5가 되면 2와 5가 만나서 10(0이 한개)생기고

N이 10이되면 2와, 5와, 10이 만나서 100(0이 두개)생긴다

N이 25가 되면 2, 5, 10, 12, 15, 20, 22, 25(5^2)가 만나서 1000000(0이 6개) 생긴다.

 

정리하자면

0의 개수는 2 * 5의 개수이며, 일반적으로 2의 개수는 5보다 많기 때문에

5의 개수라고 생각할 수 있다.

 


 

먼저, 0을 세는 함수를 만들어 주어야 한다.

예를 들어 숫자 X를 입력 받았을 때,

X!의 0의 개수는 X를 5로 나눈 몫을 더하기만 하면 된다.

 

따라서 다음과 같이 코드를 작성할 수 있다.

 

 

그리고 M의 범위가 1 이상이므로, start는 1, end는 입력값 * 5라는 변수를 만들어 준다.

start가 end보다 작거나 같은 경우에 mid = (start + end)로 중간값을 구해주고

count_zero함수에 mid를 넣어서 0의 개수를 확인한다.

0의 개수가 입력값보다 적은 경우에는 start = mid + 1로,

0의 개수가 입력값보다 많은 경우에는 end = mid - 1로 값을 바꿔주고 다시 반복한다.

 

0의 개수가 입력값과 같다면 result의 값을 mid의 값으로 변경해준다.

(왜 result를 처음에 -1로 초기화 해두었나면, 입력받은 0의 개수가 나타나지 않으면 -1을 출력해야하기 때문이다.)

 

따라서 가장 작은 값부터 큰 값 사이를 이분 탐색하면서 찾는 문제라고 생각하면 편하다.

 

 

728x90
반응형
저작자표시

'🌀 알고리즘(Algorithm) > 백준(문제 풀이)' 카테고리의 다른 글

[파이썬 풀이] 9251번: LCS(Longest Common Subsequence) - 백준  (0) 2024.02.28
fflush(stdin)을 쓰지말자...  (0) 2023.12.08
[파이썬 풀이] 25345번: 루나의 게임 세팅 - 백준  (0) 2022.08.17
[파이썬 풀이] 1152번: 단어의 개수 - 백준  (0) 2022.08.14
[파이썬 풀이] 17202번: 핸드폰 번호 궁합 - 백준  (0) 2022.07.28
'🌀 알고리즘(Algorithm)/백준(문제 풀이)' 카테고리의 다른 글
  • [파이썬 풀이] 9251번: LCS(Longest Common Subsequence) - 백준
  • fflush(stdin)을 쓰지말자...
  • [파이썬 풀이] 25345번: 루나의 게임 세팅 - 백준
  • [파이썬 풀이] 1152번: 단어의 개수 - 백준
Dodolist
Dodolist
소프트웨어 및 하드웨어에 대한 지식 및 시행착오 기록 사이트
Dodolist
도돌이의 세미프로그래밍
Dodolist
전체
오늘
어제
  • 분류 전체보기 (66)
    • 💻 소프트웨어(SW) (29)
      • HTML | JS | CSS (6)
      • Python (5)
      • Swift (9)
      • MySQL (4)
      • 프로젝트 (4)
    • 🌀 알고리즘(Algorithm) (9)
      • 백준(문제 풀이) (9)
    • ✏️나를 되돌아보는, 글 (13)
      • 진지한 글 (9)
      • 뻘글 (4)
    • 📚 지식글 (13)
    • 거인의 무릎에 올라타기 (1)

블로그 메뉴

  • | Home
  • | Miruzima
  • | Instagram

인기 글

최근 글

최근 댓글

hELLO · Designed By 정상우.v4.2.2
Dodolist
[파이썬 풀이] 11687번: 팩토리얼 0의 개수 - 백준
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.