
내가 생각했을때 문제에서 원하는부분
첫 줄에 테스트 케이스의 수 T가 주어진다.
다음 T줄에 걸쳐서 N이 주어진다.
각 줄에 위 수식에 대한 답을 출력한다.
내가 이 문제를 보고 생각해본 부분
2의 10제곱은 0이 10개가 올 것이다.
그렇듯 다 일일히 진수계산을 하고 맨뒤에 0과 연속된 0을 다 세줘야한다.
for문과 while문으로 계속 연산을 했다.
해당 진수로 나눴을때 나머지가 0이 나오면 해당 수를 나누고 카운트를 1 추가해준다.
그리고 연산을 계속한다.
나머지가 0이 아닌 다른 수가 왔을땐 그 반복문을 끝낸다.
그럼 다음 지수를 나누기 시작할 것이고,
그걸 반복한다.
문제를 보면 100만 진수까지라고 했지만 그럴 필요가 없다.
어짜피 0이 나올 경우는 자기 자신의 숫자가 들어간 진수까지 일거다.
그리고 N이 1000까지 가능하다고 반복문을 1000까지 할 필요가 없다.
그냥 자기 자신까지만 하면 된다.
코드로 구현
package baekjoon.baekjoon_23;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
// 백준 1975번 문제
public class Main805 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
for(int i = 0; i < T; i++) { //0의 갯수를 셀 숫자의 갯수 T만큼 반복
int count = 0; //0의 갯수를 저장할 변수
int N = Integer.parseInt(br.readLine());
for(int j = 2; j <= N; j++) { //N의 진수들을 계산하는 거기에 N까지만 반복
int val = N; //변해도 상관없는 변수에 N값을 저장
while(true) { //해당 진수의 숫자마다 반복 횟수가 달라지기 때문에 무한 루프
if (val % j != 0) { //val을 j로 나눠서 나머지가 0이 아니면 무한루프 종료
break;
}
count++;
val /= j;
}
}
System.out.println(count);
}
br.close();
}
}
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.