https://www.acmicpc.net/problem/1963
1963번: 소수 경로
소수를 유난히도 좋아하는 창영이는 게임 아이디 비밀번호를 4자리 ‘소수’로 정해놓았다. 어느 날 창영이는 친한 친구와 대화를 나누었는데: “이제 슬슬 비번 바꿀 때도 됐잖아” “응 지금
www.acmicpc.net
저는 해당 문제를 BFS를 통해 한 자리씩 변경하면서 몇번만에 해당 숫자로 변하는지 확인하였습니다.
isPrime을 통해 1000 ~ 9999까지 해당 숫자가 소수인지를 파악하였고 1000 전까지의 숫자는 false를 줌으로써 BFS에 들어가지 못하게 처리하였습니다.
package BOJ.BFS;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
import java.util.function.Function;
public class BOJ_1963 {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
Function<String,Integer> stoi = Integer::parseInt;
int test = stoi.apply(st.nextToken());
boolean[] isPrime = new boolean[10_000];
for(int i = 1_000; i < 10_000 ; i++){
isPrime[i] = checkPrime(i);
}
for(int t = 0 ; t < test ; t++){
st = new StringTokenizer(br.readLine());
int a = stoi.apply(st.nextToken());
int b = stoi.apply(st.nextToken());
int result = bfs(a,b,isPrime);
if(result == -1){
System.out.println("Impossible");
}else{
System.out.println(result);
}
}
}
private static boolean checkPrime(int num) {
for(int i = 2 ; i <= Math.sqrt(num); i++){
if(num % i== 0){
return false;
}
}
return true;
}
private static int bfs(int a, int b, boolean[] isPrime) {
Queue<Integer> q = new LinkedList<>();
boolean[] visited = new boolean[10_000];
int time = 0;
q.offer(a);
while(!q.isEmpty()){
int size = q.size();
for(int s = 0 ; s < size; s++){
int now = q.poll();
// System.out.println(time+" "+now);
if(now == b){
return time;
}
for(int i = 10 ; i < 100_000 ; i*=10){
for(int j = 0 ; j < 10 ; j++){
int temp = (now / i) * i;
if(i >= 100){
temp += (now % (i / 10));
}
temp += j * i/10;
if(temp < 10_000 && isPrime[temp] && !visited[temp]){
visited[temp] = true;
q.offer(temp);
}
}
}
}
time++;
}
return -1;
}
}
'알고리즘' 카테고리의 다른 글
백준 16948번 데스 나이트 (JAVA) (0) | 2022.01.23 |
---|---|
백준 9625번 BABBA (JAVA) (0) | 2022.01.22 |
백준 13418번 학교 탐방하기 (JAVA) (0) | 2022.01.20 |
백준 1949번 우수마을 (JAVA) (0) | 2022.01.19 |
백준 2533번 사회망 서비스 (JAVA) (0) | 2022.01.18 |