(BOJ) 3474. 교수가 된 현우

jmboy713·2023년 4월 30일
0

코딩테스트

목록 보기
16/27

📗문제 설명

❓ 알고리즘의 킹갓제너럴엠퍼러마제스티충무공알고리즘마스터 현우가 교수로 취임하였다!

그러나 학생들에게 크나큰 기대를 품고 첫 수업에 들어갔던 현우는 아무도 외판원 순회 문제(Traveling Salesman Problem, TSP)를 풀지 못하는 것을 보고 낙심하였다.

그 와중에 학생 남규는 TSP를 완전탐색으로 풀려고 하였고, 현우는 그걸 보고 경악을 금치 못한다. 왜냐면 TSP를 완전탐색으로 풀려면 O(N!)의 시간이 소모되는데, 이는 경악을 금치 못할 시간이기 때문이다.

그러나 남규는 O(N!)이 왜 큰지도 잘 모른다. 그래서 현우는 더더욱 경악을 금치 못하고, N!이 얼마나 큰지 대략적으로나마 알려주기 위해, 자연수 N이 주어지면 N!의 오른쪽 끝에 있는 0의 개수를 알려주기로 하였다.

그러나 현우는 경악을 금치 못하여 지금 코딩을 할 수 없는 상황이다. 여러분이 현우를 대신하여 프로그램을 작성하시오.

  • 입력
    • 첫째 줄에 테스트 케이스의 개수 T가 주어지고, 이어서 T개의 줄에 정수 N이 주어진다(1 <= N <= 1000000000).
  • 출력
    • 각 줄마다 N!의 오른쪽 끝에 있는 0의 개수를 출력한다.

💡문제 풀이 IDEA

  1. 팩토리얼을 돌려서 10으로 나눠서 나머지가 없는만큼을 return → 시간초과
  2. ㅇㅇ

👨🏻‍💻문제 풀이 CODE

import math
import sys
input=sys.stdin.readline

T=int(input())
N=[int(input()) for _ in range(T)]

for i in N:
    five=5 # 5에서 시작
    count=0
    while five<=i: 배수보다 작을경우
        count+=i//five #5로 나눈 몫을 추가. 5가 들어갈 수있는 만큼, -> 25가 들어갈수ㅡ 있는 만큼, -> 125만큼 
        five*=5
    print(count)

'''
6
3
60
100
1024
23456
8735373
'''
fiveicount
56012개( 51~512)
25602개 ( 25,50) 2는 매우 많기 때문에..
profile
Python을 활용한 프로그래밍을 하고있습니다! 데이터분석, 인공지능, Django에 관한 정보를 업로드할 예정입니다. 잘부탁드립니다!!

0개의 댓글