[ Baekjoon ] 1676번 ( SILVER V ) : 팩토리얼 0의 개수 (Java)

ma.caron_g·2022년 6월 10일
0

Class3 - Baekjoon

목록 보기
5/13
post-thumbnail

1. Problem 📃

[ 팩토리얼 0의 개수 ]

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


[ 문제 ]

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


2. Input ⌨️

[ 입력 ]

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


3. Output 🖨

[ 출력 ]

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


4. Example 📚

[ 입출력 예시 ]

예제 입력예제 출력
102
30

5. Solution 🔑

팩토리얼 값의 숫자를 하나씩 펼쳐보면 5의 n제곱이 포함된 수 부터 자릿수에 0이 생기는 것을 확인할 수 있다.
2의 n제곱은 웬만하면 5의 n제곱보다 많으므로 5의 n제곱이 몇 제곱이냐에 따라 0의 개수를 확인할 수 있다.
팩토리얼 값을 나열하여 자릿수를 확인할 수 있지만 주어진 조건에 따르면 500!은 너무 큰 값을 가지기 때문에 그렇게 풀기에는 어려움이있다.

  1. 입력받을 값을 담을 변수(N)을 선언하여 값을 입력하여주고 0의 개수를 세어줄 변수(count)를 0으로 초기화하여 선언한다.
  2. 입력받은 값 N이 5보다 크다면(5의 n제곱을 갖고있다면) N을 5로 나누어 그 값을 count에 누적해준다.
  3. 이때, 25를 기준으로 0의 개수가 1개가 아닌 2개씩 늘어나게 되는데 이를 코드로 작성하여 이러한 부분을 해결해준다.

    예를들어, 10! = 2개, 15! = 3개, 20! =4개, 25!= 6개를 해결하기 위해 N값을 5로 한번 나누어준다. 25를 5로 나누면 N은 또 5보다 큰 값을 가지므로 0의 개수가 추가된다.

  4. 최종적인 count값을 출력하여준다.

6. Code 💻

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

public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		
		int N = Integer.parseInt(st.nextToken());
		int count = 0;
		
		while(N>=5) {
			count += N / 5;
			N /= 5;
		}
		
		System.out.println(count);
	}

}
profile
다른 사람이 만든 것을 소비하는 활동보다, 내가 생산적인 활동을 하는 시간이 더 많도록 생활화 하자.

0개의 댓글