1. 문제
문제
N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 N이 주어진다. (0 ≤ N ≤ 500)
출력
첫째 줄에 구한 0의 개수를 출력한다.

2. 코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
br.close();
int result = 0;
for (int i = 1; i <= N; i++) {
if (i % 125 == 0) {
result += 3;
} else if (i % 25 == 0) {
result += 2;
} else if (i % 5 == 0) {
result += 1;
}
}
bw.write(result + "");
bw.flush();
bw.close();
}
}
3. 해설
처음에는 팩토리얼이니까 팩토리얼을 계산한다음 뒤에서부터 0을 카운트 하려 했는데 long 타입으로도 담을 수 없을 만큼 값이 올라가서 직접 팩토리얼 결과물을 도출해내는건 불가능하다
따라서 0이 언제 생기느냐를 생각해야 했고 2 * 5 의 갯수만큼 0이 생긴다는 결론에 도달 할 수 있었다
그리고 수가 올라가면서 5가 나왔다는 말은 2는 충분히 제공되었다는 뜻이고 결국 5의 개수만 세면 된다.
하지만 단순이 5의 배수일때마다 카운트를 하나씩 올린다면 그건 틀린것이다.
25는 0을 2개를 만들어내고 125는 3개를 만들어 내기 때문에 각각 카운트를 더 올려줘야한다
현재는 리터럴로 125까지 적어줬는데 수가 더 늘어 났다고 가정했을때 변수를 이용하는 형태로 바꾸는것이 좋을 것 같다.
'Java > 알고리즘(코테)' 카테고리의 다른 글
프로그래머스 2024 KAKAO WINTER INTERNSHIP : 가장 많이 받은 선물 (0) | 2024.08.09 |
---|---|
백준 1874번 : 스택 수열 (0) | 2024.08.09 |
백준 1654번 : 랜선 자르기 (1) | 2024.08.07 |
백준 1436번 : 영화감독 숌 (0) | 2024.08.05 |
백준 1259번 : 팰린드롬수 (0) | 2024.08.05 |