알고리즘 공부/정렬(Sort) | 분류

백준 2004(조합 0의 개수)

kdhoooon 2021. 1. 7. 00:02

문제


 ( n ) 의 끝자리 0의 개수를 출력하는 프로그램을 작성하시오.

 ( m )

 

 

 

 

 

풀이


팩토리얼의 0의개수를 구하는 문제의 풀이를 참고하여 풀었다.

백준 1676 (팩토리얼 0의 개수)

 

백준 1676 (팩토리얼 0의 개수)

문제 N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오. 풀이 문제의 N 의 범위가 ( 0 ≤ N ≤ 500 ) 이기 때문에 Integer 과 Long 의 범위를 넘어 오버플로

conpulake.tistory.com

위 문제에서는 2가 부족하지 않아서 5의 개수만 구해도 됐지만

조합의 경우에서는 2가 부족한 경우가 있었다.

그래서 2와 5의 개수를 각각 구한뒤 더 적은 것의 개수가 뒤에서 부터 0의 개수다.

 

<코드>

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {	
	static StringBuilder sb = new StringBuilder();
	
	public static void main(String[] args) throws IOException{
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		String[] num = br.readLine().split("\\s");
		int n = Integer.parseInt(num[0]);
		int m = Integer.parseInt(num[1]);
		int k = n - m;
		
		int countFive = 0;
		
		countFive += CountNumber(n, 5);
		countFive -= CountNumber(m, 5);
		countFive -= CountNumber(k, 5);
		
		int countTwo = 0;
		
		countTwo += CountNumber(n, 2);
		countTwo -= CountNumber(m, 2);
		countTwo -= CountNumber(k, 2);
		
		if(countFive == countTwo) {
			sb.append(countFive);
		}
		else if(countFive > countTwo) {
			sb.append(countTwo);
		}
		else
			sb.append(countFive);
		
		System.out.println(sb);
	}
	
	static int CountNumber(int n, int e) {
		
		int count = 0;
		
		while(n >= e) {
			count += n /e;
			n /= e;
		}
		
		return count;
	}
	
}