https://www.acmicpc.net/problem/1676
[ 문제 ]
N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오.
[ 입력 ]
첫째 줄에 N이 주어진다. (0 ≤ N ≤ 500)
[ 출력 ]
첫째 줄에 구한 0의 개수를 출력한다.
[ 입출력 예시 ]
예제 입력 | 예제 출력 |
---|---|
10 | 2 |
3 | 0 |
팩토리얼 값의 숫자를 하나씩 펼쳐보면 5의 n제곱이 포함된 수 부터 자릿수에 0이 생기는 것을 확인할 수 있다.
2의 n제곱은 웬만하면 5의 n제곱보다 많으므로 5의 n제곱이 몇 제곱이냐에 따라 0의 개수를 확인할 수 있다.
팩토리얼 값을 나열하여 자릿수를 확인할 수 있지만 주어진 조건에 따르면 500!은 너무 큰 값을 가지기 때문에 그렇게 풀기에는 어려움이있다.
- 입력받을 값을 담을 변수(N)을 선언하여 값을 입력하여주고 0의 개수를 세어줄 변수(count)를 0으로 초기화하여 선언한다.
- 입력받은 값 N이 5보다 크다면(5의 n제곱을 갖고있다면) N을 5로 나누어 그 값을 count에 누적해준다.
- 이때, 25를 기준으로 0의 개수가 1개가 아닌 2개씩 늘어나게 되는데 이를 코드로 작성하여 이러한 부분을 해결해준다.
예를들어, 10! = 2개, 15! = 3개, 20! =4개, 25!= 6개를 해결하기 위해 N값을 5로 한번 나누어준다. 25를 5로 나누면 N은 또 5보다 큰 값을 가지므로 0의 개수가 추가된다.
- 최종적인 count값을 출력하여준다.
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);
}
}