본문 바로가기

공부/예제 풀이

백준 1676

문제

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

입력

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

출력

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

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

public class Main {
    public static void main(String[] args) throws IOException {
        int number,multifleFive, multifleFiveSqured, multifleFivecubed,count =0;
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        number = Integer.parseInt(br.readLine());

        multifleFive = number/5;
        multifleFiveSqured = number/25;
        multifleFivecubed = number/125;

        count = multifleFive + multifleFivecubed + multifleFiveSqured;
        System.out.println(count);
    }



    }

팩토리얼의 뒷자리가0이라는 뜻은 10의 갯수를 구하는 것과 같다.

10을 다시 생각하면 2의 갯수와 5의 갯수를 세면 된다. 이때 2는 5에 비해 많이 많지만, 5가 없이는 끝자리를 0으로 만들 수 없다. 따라서 2를 세는것보다 5의갯수를 세주면 된다. 팩토리얼의 5의 갯수를 구하는 방식은 n의 값보다 작은 값중에 5로 나누었을 때 나머지가 0인 갯수를 카운트 해주면 된다. 하지만 이것보다 간단한 방식은 n을 5로 나누어주면 5의 갯수가 나온다.

이후 5의 제곱인 25, 5의 세제곱인 125는 5로 나누었을때 2의 갯수가 1개가 더 남고, 2개가 더 남는다. 이때의 5의 값도 카운트를해줘야 하는데 25는 5가 2개 나오지만, 한개는 5에서 이미 카운트 됐기에 1개만 더 세주면 되고, 125는 5에서 한번, 25에서 한번 카운트 했기 때문에 1개만 더 세주면 된다. 위와 마찬가지로, 25에서 5의 갯수와 125의 5의 갯수는 25로 나누거나 125로 나누어주면 된다.

 

 

처음으로 정답!

'공부 > 예제 풀이' 카테고리의 다른 글

백준 1475(실패)  (0) 2023.10.25
백준 11650  (0) 2023.10.24
백준 1427번(실패)  (0) 2023.10.18
백준 10814번 (실패)  (0) 2023.10.18
계산기 프로그래밍  (0) 2023.10.17