[백준, 자바] 1676번 - 팩토리얼 0의 개수

jinvicky·2024년 4월 22일
0

ALG

목록 보기
33/62
post-thumbnail

문제 링크
https://www.acmicpc.net/problem/1676

최종 코드(정답)

import java.io.*;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        int count = 0;

        while (N >= 5) {
            count += N / 5;
            N /= 5;
        }
        System.out.println(count);
    }
}

처음에 든 생각은 문제 이름 보고 팩토리얼 메서드를 떠올렸다.
다만 0의 개수라고 하니 의아했다. 결과값에서 0의 개수를 떠오면 되는 건가?
string 문자열에서 0을 찾아서 count를 올리려고도 생각을 해봤다.

근데 위 방법의 문제점은 입력값의 범위에 있다. 입력값이 최대 500!이어서 BigInteger를 써야 하고
값도 매우 커서 저 방법으로는 어림도 없을 것이다;;

그래서 % 5 계산했을 때 나누어 떨어지면 되지 않을까 생각을 해서 아래와 같이 작성했다.

오답

public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        int count = 0;

        while (N > 0) {
            if (N % 5 == 0) {
                count++;
            }
            N--;
        }
        System.out.println("count = " + count);
    }

근데 틀렸다. 왜 틀렸나 생각해 봤다.
5를 곱하면 0이 1개 생기는데 25 * 4 등의 경우 0이 2개가 생기더라. count++을 하는 것이 아니구나.

  1. 일단 5보다 크거나 같은 경우에 수행해야 한다.
  2. count++이 아니라 N / 5 한 몫만큼 +=로 누적을 해야 한다.
  3. 최종적으로 N /= 5로 N을 감소시킨다.

힘들다.

profile
일단 쓰고 본다

0개의 댓글