본문 바로가기

백준

[백준알고리즘]1676번 팩토리얼0의 개수 python,c++

문제:

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

입력:

첫째 줄에 N이 주어진다. (0 ≤ N ≤ 500)

출력:

첫째 줄에 구한 0의 개수를 출력한다.

예제:

10x9x8x7x6x5x4x3x2x1일 때, 10이 추가되는 부분은 10. 5x(짝수)로 2개가 곱해질 때이므로

예제의 출력에서 2가 나옴을 확인할 수 있다.

 

물론 5x(홀수)하면 0이 추가되진 않겠지만 팩토리얼이므로 5바로 옆엔 짝수가 올 수 밖에 없다

(5의 +1,-1이 옆에 올테니까)

 

이로써 생각해보면 5, 5x5=25, 5x5x5=125  -> 5의 배수 중 소수들

로 나누면 0의 개수가 나올 것이다(num은 500까지의 제한이 있으므로 625는 포함시키지 않는다)

(+5가 있다는 것은 팩토리얼로 4 또는 2의 짝수를 곱해서 0이 추가됨)

 

 

Python

 

N = int(input())

print(N//5 + N//25 + N//125)

그럼 코드는 이렇게 된다.

여기서 '/'와 '//'의 차이에 대해 궁금할 수 있을 듯 하다.

/와 //는 똑같이 나누기를 한다.

여기서 '/'는 float, '//'는 Int를 출력한다.

우리는 1.25이런 수보단 1,2,3 즉 1.0, 2.0, 3.0 이런 수만 출력해야 한다.

그러므로 '//'를 사용하면 된다.

 

그렇게 각각 5,25,125로 나눈 몫을 구하는 것이 팩토리얼의 개수일 것이다.

 

 

C++

c++도 위의 방식처럼 풀면 된다.

반응형