문제 링크
풀이
$N$의 길이를 $l$이라고 한다면 $N$에 $N$을 이어붙인 결과는 $N * 10^l + N$으로 표현할 수 있다.
이 값이 $K$로 나누어 떨어지는지 확인하는 것은 법 $K$에 대해 0과 합동인지 확인하는 것과 같다.
따라서, $K$로 나눈 나머지를 이용하여 0이 나올 때까지 계산을 진행하면서 횟수를 세면 된다.
이때 이미 나왔던 수가 다시 등장하면 그것은 $K$의 배수가 될 수 없음을 뜻한다.
Java 코드
더보기
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
StringBuilder out = new StringBuilder();
StringTokenizer st = new StringTokenizer(in.readLine());
String s = st.nextToken();
long f = (long) Math.pow(10, s.length());
int N = Integer.parseInt(s);
int K = Integer.parseInt(st.nextToken());
int now = N % K;
boolean[] vis = new boolean[K];
vis[now] = true;
int cnt = 1;
while (now != 0) {
now = (int) ((now * f + N) % K);
if (vis[now]) {
System.out.println(-1);
return;
}
vis[now] = true;
++cnt;
}
System.out.println(cnt);
}
}
'PS > boj' 카테고리의 다른 글
[BOJ] 19236 청소년 상어 (0) | 2021.02.17 |
---|---|
[BOJ] 17211 좋은 날 싫은 날 (0) | 2021.02.15 |
[BOJ] 16952 체스판 여행 2 (0) | 2021.02.09 |
[BOJ] 10497 Hitting the Targets (0) | 2021.02.06 |
[BOJ] 15487 A[j]-A[i]+A[l]-A[k] (0) | 2021.02.03 |