문제
https://www.acmicpc.net/problem/1676
N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오.
풀이
0이 늘어나는 경우는 10을 곱했을 때다. 10은 2*5와 같다. 같은 범위의 숫자 내에서 5의 배수보다 2의 배수가 더 많기 때문에 5의 배수의 개수를 세면 된다. (5가 몇 개든 앞에 짝을 지을 2가 있다는 뜻)
그런데 이때 25(5*5)와 125(5*5*5)와 같이 5가 여러번 곱해진 수는 5를 사용하는 개수만큼 10을 만들 수 있다. 따라서 25로는 10을 두개 만들 수 있고 125로는 10을 세개 만들 수 있다.
코드
package 정수론및조합론;
import java.util.Scanner;
public class No1676_팩토리얼0의개수 {
public static void main(String args[]) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
System.out.println(solution(n));
}
public static int solution(int n) {
int cnt=0;
if(n==0)
return cnt;
for(int i=2;i<=n;i++) {
if(i%5==0) cnt++;
if(i%25==0) cnt++;
if(i%125==0) cnt++;
}
return cnt;
}
}
'알고리즘연습 > 백준' 카테고리의 다른 글
[백준] 큐, 덱 - 18258번 큐2 java 자바 (0) | 2021.08.04 |
---|---|
[백준] 정수론및조합론 - 2004번 조합 0의 개수 (0) | 2021.08.02 |
[백준] 정수론및조합론 - 9375번 패션왕 신해빈 java 자바 (0) | 2021.07.27 |
[백준] 정수론및조합론 - 1010번 다리 놓기 java 자바 (0) | 2021.07.25 |
[백준] 정수론및조합론 - 11051번 이항계수2 java 자바 (0) | 2021.07.23 |