백준 4375번 : 1

반응형

백준 4375번 : 1

import java.util.Scanner;


public class Main {
    public void solution(){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNextInt()){
            int num = sc.nextInt();
            int checkNumber = 0;
            int count = 0;
            while(true){
                checkNumber = (checkNumber*10+1)%num;
                if(checkNumber==0){
                    count++;
                    System.out.println(count);
                    break;
                }
                count++;
            }
        }
    }

    public static void main(String[] args){
        new Main().solution();
    }
}

처음엔 아래와 같은 식으로 접근 했지만, 세 번째 입력 값인 9901의 정답이 12자리의 1이기 때문에 int 의 최대 범위를 벗어나

정답인 12자리에서야 break문이 동작하는 로직이기 때문에 while문이 계속 돌고 결국 무한루프에 빠진다. 

while(sc.hasNextInt()){
            int num = sc.nextInt();
            int checkNumber = 0;
            int count = 0;
            while(true){
                checkNumber = checkNumber*10+1;
                if(checkNumber%num==0){
                    count++;
                    System.out.println(count);
                    break;
                }
                count++;
            }
        }

mod 연산자는 +,* 에 대해서 분배법칙을 가지고 있기 때문에  이전의 구한 값에 * 10 + 1 을 해주고 mod 연산 하여도 결과는 동일하다.

그래서 계산을 mod로 매번 진행하고,  int 의 최대 범위를 벗어나지 않게 하여 해결하였다.

반응형

'개발 > 알고리즘' 카테고리의 다른 글

백준 17425번 : 약수의 합  (0) 2022.12.25
백준 2609번 : 최대공약수와 최소공배수  (0) 2022.12.24
백준 17427번 : 약수의 합2  (0) 2022.12.23
백준 1037번 : 약수  (0) 2022.12.23
백준 10430번 : 나머지  (0) 2022.12.22