본문 바로가기
프로그래밍 문제/BOJ(백준 온라인 저지)

[BOJ 1676번] 팩토리얼 0의 개수(JAVA)

by 테크케찰 2020. 8. 14.

https://www.acmicpc.net/problem/1676

 

1676번: 팩토리얼 0의 개수

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

www.acmicpc.net

import java.util.*;
import java.io.*;

public class Main {
	static BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
	static BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
	static StringBuilder sb=new StringBuilder();
	
	public static void main(String args[]) throws Exception {
		try (Scanner scanner = new Scanner(System.in)) {
			int n=scanner.nextInt();
			int numberof2=0, numberof5=0;
			for(int i=2;i<=n;i++) {
				int temp=i;
				while(true) {
					if(temp%2==0) {
						numberof2++;
						temp/=2;
					}
					else if(temp%5==0) {
						numberof5++;
						temp/=5;
					}
					else break;
				}
			}
			int result=Math.min(numberof2, numberof5);
			System.out.println(result);
		}
	}

}

팩토리얼에서 0의 개수는 10의 거듭제곱에 따라서 결정됩니다.

10은 2와 5를 소인수로 가지므로, n의 팩토리얼을 살펴본다고 하면, 1부터 n까지의 숫자가 2와 5를 소인수로 몇 개를 갖는지 확인하고, 그 중 작은 수를 결과값으로 지정해주면 답이 됩니다.

예를 들어 10!을 살펴보면 2, 4, 6, 8, 10에서 2^8이 나오고, 5, 10에서 5^2이 나오므로 10^2을 인수로 갖게 됩니다.

따라서 끝자리에 0이 두 개 나오는 것을 확인할 수 있습니다.