반응형
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 |