백준

[Java] 백준 4375번 - 1

효재감자 2024. 4. 23. 13:35

문제 링크 : 백준 4375번 - 1

 

특이한 것이 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);
    }
}