백준
[Java] 백준 4375번 - 1
효재감자
2024. 4. 23. 13:35
특이한 것이 BigInteger를 사용해줘야 하는데, 예제 테스트케이스의 출력을 보면 12자리의 n의 배수가 있는것을 확인할 수 있다.
111,111,111,111 = 12자리 인데, int의 범위인 2,147,483,647을 훌쩍 넘어간다. 때에 따라 long을 써도 범위초과가 될 수 있으니 BigInteger를 사용해주었다.
num을 입력받고, n은 처음 1에 10을 곱해주고 1을 더하는 방식으로 1의 자리를 늘려가면 된다.
num이 3이라면 111이 3의 배수이므로 3이 출력된다. 아래 코드를 보면서 이해해보자.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input;
while ((input = br.readLine()) != null) {
int num = Integer.parseInt(input);
// 각 자릿수가 모두 1로만 이루어진 n의 배수를 만들어주기 위해 BigInteger를 만들어준다.
BigInteger bi = new BigInteger("1");
while (true) {
// bi를 나누면 몫과 나머지가 나오는데, [1]로 나머지를 추출하여 0인지 확인한다.
// 0이면 bi의 자리수를 출력 후 종료하고 아니라면 1의 자리를 늘려가며 반복해 확인한다.
if (Objects.equals(bi.divideAndRemainder(BigInteger.valueOf(num))[1], BigInteger.ZERO)) {
System.out.println(bi.toString().length());
break;
}
bi = bi.multiply(BigInteger.valueOf(10L)).add(BigInteger.ONE);
}
}