상세 컨텐츠

본문 제목

백준 2004번

백준 알고리즘 풀이

by 발발개발 2021. 4. 6. 13:22

본문

원본 : www.acmicpc.net/problem/2004

 

2004번: 조합 0의 개수

첫째 줄에 정수 $n$, $m$ ($0 \le m \le n \le 2,000,000,000$, $n \ne 0$)이 들어온다.

www.acmicpc.net

 

풀이

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Main {

	public static BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
	public static BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));

	public static void main(String[] args) throws Exception {
		String str = reader.readLine();
		long n = Long.parseLong(str.split(" ")[0]);
		long m = Long.parseLong(str.split(" ")[1]);
		
		long nFac[] = new long[2];
		long mFac[] = new long[2];
		long nMinusMFac[] = new long[2];
		
		nFac = cntTwoFive(n);
		mFac = cntTwoFive(m);
		nMinusMFac = cntTwoFive(n - m);
		
		long resultCntTwo = nFac[0] - mFac[0] - nMinusMFac[0];
		long resultCntFive = nFac[1] - mFac[1] - nMinusMFac[1];
		
		if (resultCntTwo <= resultCntFive) {
			writer.write(resultCntTwo + "");
		} else {
			writer.write(resultCntFive + "");
		}
		
		writer.flush();
	}
	
	public static long[] cntTwoFive(long n) {
		long cntTwo = 0;
		long cntFive = 0;
		long two = 2;
		long five = 5;
		
		while (true) {
			if (two > n) {
				break;
			} else {
				cntTwo += n / two;
				two *= 2;
			}
		}
		
		while (true) {
			if (five > n) {
				break;
			} else {
				cntFive += n / five;
				five *= 5;
			}
		}
		
		long result[] = new long[2];
		result[0] = cntTwo;
		result[1] = cntFive;
		
		return result;
	}
	
}

'백준 알고리즘 풀이' 카테고리의 다른 글

백준 10773번  (0) 2021.04.06
백준 10828번  (0) 2021.04.06
백준 1676번  (0) 2021.04.06
백준 9375번  (0) 2021.04.06
백준 1010번  (0) 2021.04.06

관련글 더보기

댓글 영역