N!을 계산한 후에 문자열로 변환하고 charAt() 써서 0의 개수를 세면 되는거아냐?!
(어림도 없음)
이러한 방식은 N이 조금만 커져도 int나 long으로 표현할 수 없을 정도로 큰 수가 되기 때문에
수학적으로 접근하는 것이 훨씬 간결하고 효율적이다.
N!을 계산하지 않고도 0의 개수를 알 수 있다.
이 문제에서는
팩토리얼의 끝에 있는 0의 개수는 5의 배수 개수에 의해 결정된다
는 점을 활용하면 된다.
import java.io.*;
import java.util.*;
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;
for(int i=5; i<=N; i*=5) {
count += N / i;
}
System.out.println(count);
}
}

프로그래밍 문제를 해결할 때는 단순히 직관에만 의존하기보다
수학적 규칙이나 공식을 이용해서 효율적으로 접근할 수 있는지를 고려해보자!
'알고리즘 > 백준' 카테고리의 다른 글
[백준 10816번] 숫자 카드 2(Java) : HashMap (0) | 2024.11.03 |
---|---|
[백준 11724번, 2178번, 1920번] 탐색(Java) (4) | 2024.11.02 |
Deque (0) | 2024.10.30 |
[백준 10814번] 나이순 정렬(Java) (2) | 2024.10.29 |
[백준 2751번] 수 정렬하기 2(Java) (4) | 2024.10.28 |