๋ฌธ์ (์ถ์ฒ: https://www.acmicpc.net/problem/1963)
< ์์ ๊ฒฝ๋ก >
๋ฌธ์ ํ์ด
๋ชจ๋ ์๋ฆฟ์์ ์ซ์๋ฅผ ๋ฐ๊ฟ๊ฐ๋ฉฐ ์์์ธ์ง ํ์ธํ๋ค. ์์๋ผ๋ฉด ๋ค์ ๋ณํ์ ๊ณ์ํ๋ค.
my solution (Java)
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class _1963_ { // ์์ ๊ฒฝ๋ก
static boolean arr[];
static int result;
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
arr = new boolean[10000];
for (int i = 2; i < 5001; i++) {
if (!arr[i]) {
for (int j = i + i; j < 10000; j += i) {
arr[j] = true;
}
}
}
int t = Integer.parseInt(bf.readLine());
for (int i = 0; i < t; i++) {
st = new StringTokenizer(bf.readLine());
String a = st.nextToken();
String b = st.nextToken();
result = -1;
if (a.equals(b)) {
bw.write("0\n");
} else {
search(a, b);
if(result==-1) {
bw.write("Impossible\n");
}else {
bw.write(result + "\n");
}
}
}
bw.flush();
}
private static void search(String a, String b) {
Queue<int[]> queue = new LinkedList<>();
queue.add(new int[] { Integer.parseInt(a), 0 });
boolean visited[] = new boolean[10000];
visited[Integer.parseInt(a)] = true;
while (!queue.isEmpty()) {
int num[] = queue.poll();
String temp = Integer.toString(num[0]);
for (int i = 0; i < b.length(); i++) {
for (int j = 0; j < 10; j++) {
if (temp.charAt(i)-'0' == j || (i==0 && j==0)) {
continue;
}
String str = temp.substring(0, i) + j + temp.substring(i + 1, b.length());
if (arr[Integer.parseInt(str)]) {
continue;
}
if (str.equals(b)) {
result = num[1] + 1;
break;
}
if (!visited[Integer.parseInt(str)]) {
visited[Integer.parseInt(str)]=true;
queue.add(new int[] { Integer.parseInt(str), num[1] + 1 });
}
}
}
if (result != -1) {
break;
}
}
}
}
๋ณ์)
arr : ์์ ํ๋จ
t : ํ ์คํธ ์ผ์ด์ค ์
a, b : ๋ค ์๋ฆฌ ์์
result : ๋ ์์ ์ฌ์ด์ ๋ณํ์ ํ์ํ ์ต์ ํ์
๋ค ์๋ฆฌ ์๋ง ์์์ธ์ง ํ๋จํ๋ฏ๋ก 9999๊น์ง ๋ฏธ๋ฆฌ ์์๋ฅผ ํ๋จํ์ฌ arr์ boolean ๊ฐ์ผ๋ก ์ ์ฅํ๋ค. ํ ์คํธ ์ผ์ด์ค ์ t๋ฅผ ์ ๋ ฅ๋ฐ์ ํ t๋งํผ ๋ค ์๋ฆฌ ์์ 1์์ ์ ๋ ฅ๋ฐ์ a, b์ ์ ์ฅํ๋ค. ์ ๋ ฅ๋ฐ์ a, b๊ฐ ๊ฐ์ ๊ฐ์ด๋ผ๋ฉด ๊ณ์ฐํ์ง ์๊ณ 0์ ์ถ๋ ฅํ๋ค. ๊ฐ์ด ๋ค๋ฅด๋ค๋ฉด search ํจ์๋ฅผ ํธ์ถํ๋ค. ๋ง์ฝ ๋ณํ์ด ๋ถ๊ฐ๋ฅํ๋ค๋ฉด "Impossible"์ ์ถ๋ ฅํ๊ณ , ๋ณํ์ด ๊ฐ๋ฅํ๋ค๋ฉด result ๊ฐ์ ์ถ๋ ฅํ๋ค.
search ( String a, String b)
Queue์ [ํ์ฌ ๊ฐ, ๋ณํ ํ์]๋ฅผ ๋ฐฐ์ด๋ก ์ ์ฅํ๋ค. ์ด๊ธฐ ๊ฐ์ธ a๋ฅผ ๋ฐฉ๋ฌธ ํ์ ํ queue๊ฐ ๋น ๋๊น์ง ๋ค์ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.
1) queue poll
2) ๊ฐ์ ๋งจ ์์๋ฆฌ๋ถํฐ ํ๋์ฉ 0~9๋ก ๋ฐ๊พธ๊ธฐ
3) ๋ง์ฝ ๋งจ ์์๋ฆฌ๊ฐ 0์ด๊ฑฐ๋ ๋ฐ๊พธ๋ ค๋ ๊ฐ๊ณผ ์ง๊ธ ๊ฐ์ด ๊ฐ์ ๊ฒฝ์ฐ๋ ๋์ด๊ฐ๋ค
4) ๋ฐ๊พผ ๊ฐ์ด ์์๊ฐ ์๋๋ผ๋ฉด ๋์ด๊ฐ๋ค
5) ๋ฐ๊พผ ๊ฐ์ด b์ ์ผ์นํ๋ค๋ฉด result ์ ๋ฐ์ดํธ ํ ์ข ๋ฃ
6) ๋ฐ๊พผ ๊ฐ์ด ์์์ด๊ณ , b์ ์ผ์นํ์ง ์๊ณ , ์์ง ๋ฐฉ๋ฌธ์ฒ๋ฆฌ ๋์ง ์์๋ค๋ฉด ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ ํ queue์ ์ถ๊ฐ
'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] 1051_์ซ์ ์ ์ฌ๊ฐํ (0) | 2024.05.09 |
---|---|
[Baekjoon] 11502_์ธ ๊ฐ์ ์์ ๋ฌธ์ (0) | 2024.05.08 |
[Baekjoon] 1986_์ฒด์ค (0) | 2024.05.03 |
[Baekjoon] 13022_๋๋์ ์ฌ๋ฐ๋ฅธ ๋จ์ด (1) | 2024.05.02 |
[Baekjoon] 10157_์๋ฆฌ๋ฐฐ์ (0) | 2024.05.01 |